Eventos Avançados de Botão
Aprenda como lidar com cliques de usuário 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 o Registrar callback ou o baseado em System abordagens, você pode tratar diretamente os dados brutos do evento de entrada. Essa abordagem é a mais difícil, mas a mais flexível.
O componente PointerEventsResult
Quando um evento de ponteiro é detectado pelo engine, a entidade 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 em PointerEventsResult.
O PointerEventsResult armazena um commands array, contendo um objeto para cada evento de ponteiro que ele armazena. Ele guarda uma lista de até 30 eventos, eventos mais novos são armazenados no final do array. Uma vez que a lista atinge o comprimento de 30, começa a descartar eventos antigos para cada novo que entra.
Cada evento no commands array possui os seguintes dados:
analog: Flag para marcar se o evento é de uma entrada analógica ou digital. Entradas digitais têm valor 1, entradas analógicas (como um joystick) têm valor 0.botão: Qual id do botão foi pressionado. O número corresponde aoInputActionenum, que lista todos os botões disponíveis.state: Tipo de evento de ponteiro, do enumPointerEventType. 0 refere-se aPointerEventType.PET_DOWN, 1 paraPointerEventType.PET_UP, 2 paraPointerEventType.PET_HOVER_ENTER, 3 paraPointerEventType.PET_HOVER_LEAVEtimestamp: Um lamport timestamp para identificar cada evento de botão.Nota: Esse timestamp não é numerado com base no tempo 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:array inclui:entityId: Número de Id da entidade que foi atingida pelo raio.: meshName Stringorigin: espera um para o ângulo da normal do acerto no espaço mundial.position: espera um com o nome interno da malha específica no modelo 3D que foi atingida. Isso é útil quando um modelo 3D é composto por múltiplas meshes.para a posição onde o raio intersectou com a entidade atingida (relativa à cena)length: Comprimento do raio desde sua origem até a posição onde o acerto contra a entidade ocorreu.: espera um com um vetor de direção normalizado, descrevendo o ângulo da normal do hit no espaço mundial.
Rastrear movimentos do jogador
Em jogos multiplayer em tempo real onde o tempo dos movimentos do jogador é crítico, você pode querer acompanhar a posição de cada jogador usando um servidor terceirizado como a fonte da verdade. Você pode melhorar o tempo de resposta ouvindo o botão antecipadamente 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, portanto você também deve sondar regularmente a posição atual do jogador para fazer correções. Equilibrar essas previsões e correções pode exigir muitos ajustes finos.
Atualizado