Eventos avançados de botão

Aprenda a lidar com cliques do utilizador na sua cena.

Se você precisar que a interação na sua cena siga uma lógica personalizada que não seja compatível com os Registrar callback ou o baseadas em System abordagens, você pode lidar diretamente com os dados brutos do evento de input. Essa abordagem é a mais difícil, mas a mais flexível.

O componente PointerEventsResult

Quando um evento de pointer é detectado pelo engine, a entity que foi clicada recebe um PointerEventsResult componente. Esse componente contém todos os dados brutos sobre o evento de hit e armazena dados históricos sobre eventos anteriores.

Os helpers em Input, como inputSystem.wasJustClicked ou inputSystem.getInputCommand são bons para a maioria dos cenários simples, mas se você precisar obter mais detalhes sobre o evento de hit, verifique os dados brutos no PointerEventsResult.

O PointerEventsResult armazena um commands array, contendo um objeto para cada evento de pointer que ele armazena. Ele armazena uma lista de até 30 eventos, e os eventos mais recentes são armazenados no final do array. Quando a lista atinge um comprimento de 30, ela começa a descartar eventos antigos para cada novo evento que chega.

Cada evento no commands array tem os seguintes dados:

  • analog: Flag para indicar se o evento vem de um input analógico ou digital. Inputs digitais têm um valor de 1, inputs analógicos (como um joystick) têm um valor de 0.

  • button: Qual id de botão foi pressionado. O número corresponde ao InputAction enum, que lista todos os botões disponíveis.

  • state: Tipo de evento de pointer, do enum PointerEventType. 0 se refere a PointerEventType.PET_DOWN, 1 // desenhar UI PointerEventType.PET_UP, 2 // desenhar UI PointerEventType.PET_HOVER_ENTER, 3 // desenhar UI PointerEventType.PET_HOVER_LEAVE

  • timestamp: Um timestamp lamport para identificar cada evento de botão.

    Nota: Esse timestamp não é numerado com base no horário atual. Pense nele como um contador que começa em 0 e é incrementado em 1 para cada evento.

  • hit: Um objeto que contém os seguintes dados sobre o evento de hit:

    • entityId: Número de id da entity que foi atingida pelo ray.

    • meshName: String com o nome interno do mesh específico no modelo 3D que foi atingido. Isso é útil quando um modelo 3D é composto por vários meshes.

    • origin: Vector3 para a posição onde o ray se origina (relativa à scene)

    • position: Vector3 para a posição onde o ray intersectou a entity atingida (relativa à scene)

    • length: Comprimento do ray desde sua origem até a posição onde ocorreu o hit contra a entity.

    • normalHit: Vector3 com um vetor de direção normalizado, descrevendo o ângulo da normal do hit no world space.

Rastrear movimentos do jogador

Em jogos multiplayer em tempo real, em que o timing dos movimentos do jogador é crítico, você pode querer acompanhar a posição de cada jogador usando um servidor de terceiros como fonte da verdade. Você pode melhorar o tempo de resposta ouvindo o botão com antecedência e prevendo seus efeitos no seu servidor antes que o avatar tenha mudado de posição.

Essa abordagem ajuda a compensar atrasos de rede, mas certamente resultará em discrepâncias, então você também deve consultar regularmente a posição atual do jogador para fazer correções. Equilibrar essas previsões e correções pode exigir muito ajuste fino.

Atualizado