Eventos avanzados de botón
Aprende cómo manejar los clics de usuario en tu escena.
Si necesitas que la interacción en tu escena siga una lógica personalizada que no es compatible con el Registro de callbacks o el Basado en System enfoques, puedes trabajar directamente con los datos de eventos de entrada sin procesar. Este enfoque es el más difícil, pero el más flexible.
El componente PointerEventsResult
Cuando el engine detecta un evento del puntero, la entidad que fue clickeada se le asigna un PointerEventsResult componente. Este componente contiene todos los datos sin procesar sobre el evento de hit, y almacena datos históricos sobre eventos previos.
Los ayudantes en Input, como inputSystem.wasJustClicked o inputSystem.getInputCommand son buenos para la mayoría de los escenarios simples, pero si necesitas obtener más detalles sobre el evento de hit, revisa los datos sin procesar en el PointerEventsResult.
El PointerEventsResult almacena un commands array, que contiene un objeto por cada evento de puntero que almacena. Guarda una lista de hasta 30 eventos, los eventos más nuevos se almacenan al final del array. Una vez que la lista alcanza una longitud de 30, empieza a descartar eventos antiguos por cada nuevo que entra.
Cada evento en el commands array tiene los siguientes datos:
analog: Indicador para marcar si el evento proviene de una entrada analógica o digital. Las entradas digitales tienen un valor de 1, las entradas analógicas (como un joystick) tienen un valor de 0.botón: Qué id de botón fue presionado. El número corresponde alInputActionenum, que lista todos los botones disponibles.state: Tipo de evento del puntero, del enumPointerEventType. 0 se refiere aPointerEventType.PET_DOWN, 1 aPointerEventType.PET_UP, 2 aPointerEventType.PET_HOVER_ENTER, 3 aPointerEventType.PET_HOVER_LEAVEtimestamp: Un timestamp de lamport para identificar cada evento de botón.Nota: Este timestamp no está numerado en función del tiempo actual. Piénsalo como un contador que comienza en 0 y se incrementa en 1 por cada evento.
hit: Un objeto que contiene los siguientes datos sobre el evento de hit:entityId: Número ID de la entidad que fue impactada por el rayo.meshName: String con el nombre interno de la malla específica en el modelo 3D que fue impactada. Esto es útil cuando un modelo 3D está compuesto por múltiples mallas.origin: Vector3 para la posición donde se origina el rayo (relativa a la escena)position: Vector3 para la posición donde el rayo se intersectó con la entidad impactada (relativa a la escena)length: Longitud del rayo desde su origen hasta la posición donde ocurrió el impacto contra la entidad.normalHit: Vector3 con un vector de dirección normalizado, que describe el ángulo de la normal del hit en el espacio mundial.
Rastrear movimientos del jugador
En juegos multijugador en tiempo real donde la sincronización de los movimientos del jugador es crítica, puede que quieras llevar un registro de la posición de cada jugador usando un servidor de terceros como la fuente de la verdad. Puedes mejorar el tiempo de respuesta escuchando el botón con antelación y predecir sus efectos en tu servidor antes de que el avatar haya cambiado de posición.
Este enfoque ayuda a compensar los retrasos de la red, pero seguramente resultará en discrepancias, por lo que también deberías sondear regularmente la posición actual del jugador para hacer correcciones. Equilibrar estas predicciones y correcciones puede requerir mucho ajuste fino.
Última actualización