Disparar a bala da pistola em vez da câmera, mantendo-a precisa em relação ao retículo


14

Estou trabalhando em um jogo em primeira pessoa e tive um problema. No meu jogo, há a arma do jogador sendo renderizada, bem como um retículo no centro da tela - assim:

insira a descrição da imagem aqui

Primeiro, vamos imaginar que não havia modelo de arma sendo renderizado. Em seguida, disparar a bala é fácil - você apenas gera a bala exatamente onde estão os "olhos" do jogador e usa trig para calcular a velocidade com base na direção que o jogador estiver olhando.

Mas agora, quando adicionamos o modelo da arma ... não podemos apenas gerar a bala onde estão os olhos dos jogadores, precisamos gerá-la na ponta da arma (certo?). Então você faz isso, mas ... como você move a bala de maneira que ela atinja onde quer que o retículo esteja apontando?

Lembre-se de que a bala no meu jogo (na verdade é um foguete, neste caso) estará se movendo devagar o suficiente para que seu movimento possa ser visto; portanto, algumas soluções alternativas que normalmente funcionariam se a bala fosse rápida demais para serem observadas não funcionarão. . Por exemplo, se você não o gerasse para parecer que está saindo da ponta da arma, o jogador definitivamente perceberia isso.


1
A resposta à sua pergunta é, raycasting =)
Grey

É tudo fumaça e espelhos; quaisquer balas renderizadas não têm nada a ver com o caminho ou raio real da bala.
congusbongus

@congusbongus Quero dizer, OFC a bala renderizada não precisa ser exatamente alinhada com a matemática da própria bala, mas se você não fizer isso até certo ponto, começa a parecer ruim, e é aí que estou preso .
Aaron

Respostas:


20

Faça um raio da câmera através do centro / retículo para o mundo. Descubra em que lugar do mundo ele atinge. Dispare a bala do cano da arma naquele momento, em vez de sair diretamente da arma.

Pontos de bônus por animar as mãos e a arma para apontar nessa direção enquanto mira ao redor para que a bala ainda pareça estar disparando diretamente para fora do cano em vez de sair em ângulo.

Se você fizer a animação, poderá disparar a bala diretamente para fora do focinho sempre. Apenas faça o seu melhor para que a arma aponte no ponto em que o retículo está mirando dentro de limites razoáveis. Também é útil ter dois retículos de uma maneira que, naturalmente, mostre o centro da tela em que o jogador está tentando mirar e o ponto em que a arma está realmente mirando.

Ou você pode mostrar um único retículo que é o local onde a arma estará mirando depois de terminar a animação e disparar a bala nessa direção, em vez do local em que a arma está mirando atualmente em sua animação. Dessa forma, o retículo sempre mostra o que o jogador realmente acertará, mas não fingirá que você pode, por exemplo, atirar em uma parede apenas porque a câmera vê algo que a arma não pode fazer.

Tudo isso foi usado em jogos reais. O que você prefere dependerá do estilo de jogo que você está criando, qual é o trade-off entre simulação e jogo que você deseja, seja multijogador ou não, etc.


muitos jogos nem usam modelos para balas, mas apenas disparam um raio, como mencionado para verificar uma colisão, o que você pode fazer é exibir um modelo de arma diferente para outros jogadores do que o que aparece na exibição dos jogadores atuais e alinhar com o local onde a bala é disparado a partir com o personagem que parece estar apontando para baixo os pontos turísticos
Matthew Pigram

Counter-Strike Source usa este método (que tem vista, jogador e modelos mundiais)
Matthew Pigram

-1

Que tal se livrar do retículo? Então, as balas poderiam sair em linha reta da arma, exatamente como na realidade. Visar a mira significaria mais, pois você alinharia o alvo e o cano da arma (menos alguns centímetros no modelo do jogador).


Embora muitos jogos façam algo assim, essa é uma decisão de design muito ampla, com implicações na totalidade do ritmo e combate do jogo.
#

Para mim, isso é mais para evitar o problema do que resolvê-lo.
Aaron
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.