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 aoInputActionenum, que lista todos os botões disponíveis.state: Tipo de evento de pointer, do enumPointerEventType. 0 se refere aPointerEventType.PET_DOWN, 1 // desenhar UIPointerEventType.PET_UP, 2 // desenhar UIPointerEventType.PET_HOVER_ENTER, 3 // desenhar UIPointerEventType.PET_HOVER_LEAVEtimestamp: 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