¡Buenas…!
Resulta que en mi escena principal tengo una camara que gira alrededor de un objeto que tiene barios botones que lleva cada uno a otros tiros de cámara al ser activados; estos botones funcionan perfecto en PC,pero al activar el touch interface para móviles, pierden su funcionalidad. ¿alguna idea de como solucionar esto?¿algún tutorial o pasos que me puedan ayudar?
Si estás utilizando el “On Input Touch Begin” en los colisionadores 3D, asegúrate de NO haber activado el modo “set input mode UI only”, ya que por lo que he leído aquí eso hace que se responda sólo a eventos de la UI:
Estaría bien que comentaras cómo detectas que el usuario activa esos botones y qué estás haciendo para activar “el touch interface para móviles” ya que podrías estar haciendo algo de forma incorrecta.
Lo más seguro es que la interfaz que aparece al activar los controles móviles esté impidiendo que llegue el evento a los botones que tienes dentro de componentes widget dentro de actores. Que se me ocurra, puedes hacer una de estas tres cosas:
Para que el touch interface no bloquee el evento cuando el usuario tenga que pulsar botones que estén en widgets dentro de componentes widget en actores, puedes desactivar la interfaz con los botones en pantalla: ‘Get player controller → Activate touch interface ’ y lo pones a “None”. Una vez el usuario ha pulsado en el widget, y no esperas que tenga que pulsar ningún otro widget dentro de un componente widget dentro de un actor, vuelves a poner la referencia a la touch interface que estés usando. ¿Y no se pueden tener las dos? (respuesta en la segunda opción). Si sólo tienes botones widget dentro de objetos 3D y no utilizas el touch interface, prueba a ponelo a None directamente en los ajustes del proyecto → Input para que esté así siempre fijo.
Utiliza un “Widget Interaction Component” para ejecutar los eventos de Touch que recibas. Busca tutoriales sobre cómo utilizar ese componente.
Lo más sencillo sería utilizar en los botones de los componentes widget que están en actores, el evento “OnInputTouchBegin” o el “OnPress”, que parece que sí se registran. (El “OnClicked” parece que no)
La primera y tercerca opción son muy cutres. Yo haría la segunda, pero tiene un poco más de trabajo. Si estás empezando con Unreal Engine, haz la tercera.
Si lo de antes no funciona, asegúrate de no estar consumiendo en ningún otro sitio los eventos Touch. Selecciona los nodos del evento “InputTouch” y en el panel Details, desmarca “Consume Input”. Aquí tienes información sobre esto: How does this Touch Input Event works? - #6 by Everynone
PD: Como no dices ni en qué plataforma móvil te da problemas, o si lo que te da problemas es una preview que haces en el teléfono o si estás haciendo una full build completa, ni comentas si alguno de esos eventos de pulsación llega a activarse cuando estás ejecutándolo en el teléfono, ni si al activar el touch interfaces se te muestran botones sobre la pantalla… Pues mucho estoy suponiendo para la información que estás dando. Recuerda que la calidad de las respuestas DEPENDE MUCHO de la calidad de la información que se proporcione.
PD2: Nunca he hecho nada con Touch en Unreal Engine, así que sólo me estoy basando en lo que he leído despues de hacer un par de búsquedas.
Muchísimas gracias por la atención prestada, a la vez que extiendo una disculpa por el link del video, debí suponerlo. Lo que intento hacer es una presentación arquitectónica momentánea en la que tengo un menú en primer plano (que sí funciona al activar el touch en ordenadores MAC y Windows y dispositivos móviles Android y IOS) y varios puntos 3d flotantes que te llevan a otras estancias del proyecto (que son precisamente los que no funcionan en dispositivos móviles al activar el touch). Actualmente estoy probando en un Galaxy S8+ y un IPhone 12.
Los menú widgets en primer plano se mueve junto a una cámara que rota alrededor de un complejo habitacional con varios puntos y/o botones 3d widget que al picar en ellos, te llevan a distintas estancias de dicho proyecto.
Voy hacer lo que me sugieres y voy a seguir estudiando y razonando detenidamente al respecto, veré el link que me proporcionas.
Muchísimas gracias Juande, te dejare saber cualquier cosa.
Prueba primero la solución rápida (en la parte del clic de los botones dentro de la escena 3D), que es añadir los eventos OnInputTouchBegin y OnPress para comprobar que realmente el “problema” es de los widgets que están dentro de componentes widget dentro de actores:
Si te funciona, puedes dejarlo así, o si quieres hacerlo como hay que hacerlo, entonces implementas la solución usando el “Widget Interaction Component”.
Otra cosa que no tiene nada que ver con el asunto tratado: Ten cuidado con usar (marcado en amarillo) datos generados dentro de un Sequence donde haces uso de Delays (marcados en rojo). Tal cual lo tienes hecho, sólo se ejecutará una vez el nodo marcado en amarillo con el primer elemento que da el “For Each Loop”. Para los siguientes actores que devuelve el “Get All Actors of Class” no se ejecutará, sólo lo hará para el primero encontrado. (Si hay sólo uno encontrado no debería haber ningún problema; pero si hay más de uno, entonces sí que puedes tener problemas por ese nodo “SHOW POI” no estar ejecutándose en el resto ).
Recuerda que en un Sequence, una vez que en uno de sus “Then X” se encuentra un Delay, el Sequence pasará a ejecutar el siguiente “Then X”. (Un Delay no detiene la ejecución de los “Then X” siguientes en un Sequence)
Justo entro para comunicarte que ayer pude resolver con la primera opción de las tres que sugeriste y veo ahora tu última respuesta. Conecté el nodo “Active Touch Interface” en modo NONE en el “Add Input Mapping - On Receive Controller Changed Eventy” de la cámara principal (2da. Imagen que había proporcionado) y funciona perfectamente cuando se hace touch en botón 3d, sin embargo, si selecciono cualquier otro modo en vez de NONE incluyendo el que personalicé, NO funciona.
Solo quedan algunas cositas que no he podido resolver pero que aprovecharé para preguntarlas, la primera es generar un rango mínimo y máximo de giro en el “Add Controller Pitch Imput” del eje Y; actualmente tengo el de la siguiente foto que dejó de funcional al activar el touch interface personalizado, ¿tienes alguna sugerencia o referencia al respecto?
Me alegro de que lo solucionaras. Entonces era (como decían en el enlace que compartí) lo que se sitúa por encima de la pantalla al poner los controles virtuales lo que impide que el touch llegue a los Widgets dentro de WidgetComponent dentro de Actores.
El problema que tiene la primera opción es que o tienes un estado en el que sólo se pueden tocar los widgets que están en la escena 3D o los widgets que están colocados como widgets en la pantalla 2D (con el Add To Viewport), pero no los dos a la vez.
En el caso de que necesites tener funcionando tanto los widgets que están en la escena 3D como en la pantalla 2D, puedes implementar la segunda o tercera solución que te di. Siendo la tercera la más rápida (y de andar por casa) y la segunda, como realmente se debería hacer.
Sobre preguntar sobre algo distinto, te recomiendo que crees un tema nuevo con un título que refleje bien lo que estás preguntando.