Disparando la bala del arma en lugar de la cámara, pero manteniéndola precisa con respecto a la retícula

14

Estoy trabajando en un juego en primera persona y me he encontrado con un problema. En mi juego, se muestra el arma del jugador, así como una retícula en el centro de la pantalla, como esta:

ingrese la descripción de la imagen aquí

Primero, imaginemos que no se renderizó ningún modelo de arma. Luego disparar la bala es fácil: solo genera la bala exactamente donde están los "ojos" del jugador, y luego usa trigonométrico para calcular la velocidad en función de la dirección que esté mirando el jugador.

Pero ahora, cuando agregamos el modelo de arma ... no podemos generar la bala donde están los ojos de los jugadores, tenemos que generarla en la punta de la pistola (¿verdad?). Entonces haces eso, pero entonces ... ¿cómo mueves la bala de manera que golpee donde sea que apuntara la retícula?

Tenga en cuenta que la bala en mi juego (en realidad es un cohete, en este caso) se moverá lo suficientemente lento como para que se pueda ver su movimiento, por lo que alguna solución que generalmente funcionaría si la bala es demasiado rápida para ser observada no funcionará . Por ejemplo, si no lo engendraste para que parezca que sale de la punta del arma, el jugador definitivamente lo notará.

Aaron
fuente
1
La respuesta a su pregunta es, Raycasting =)
Gray
Todo es humo y espejos; las viñetas representadas no tienen nada que ver con la ruta o el rayo real de la bala.
congusbongus
@congusbongus Quiero decir, OFC, la viñeta renderizada no tiene que estar exactamente alineada con las matemáticas de la viñeta en sí, pero si no haces esto hasta cierto punto, comienza a verse mal, y ahí es donde estoy atascado .
Aaron

Respuestas:

20

Dispara un rayo desde la cámara a través del centro / retícula al mundo. Descubra en qué parte del mundo golpea. Dispara la bala desde el cañón de la pistola en ese punto en lugar de sacarla directamente de la pistola.

Puntos de bonificación por animar las manos y la pistola para que apunten en esa dirección mientras apuntan para que la bala todavía parezca disparar directamente desde el hocico en lugar de salir en ángulo.

Si haces la animación, siempre puedes disparar la bala directamente del hocico. Solo haz tu mejor esfuerzo para que la pistola apunte al punto al que apunta la retícula dentro de límites razonables. También es útil tener dos retículas de manera que, naturalmente, muestren el centro de la pantalla al que el jugador está tratando de apuntar y el punto al que apunta realmente el arma.

O puede mostrar una retícula única que es donde apuntará el arma después de terminar la animación y disparar la bala en esa dirección en lugar del lugar donde el arma apunta actualmente en su animación. De esta manera, la retícula siempre muestra lo que el jugador realmente golpeará pero no pretenderá que, por ejemplo, puede disparar alrededor de una pared solo porque la cámara ve algo que el arma no puede hacer.

Todos estos se han utilizado en juegos reales. Lo que prefiera dependerá del estilo de juego que esté haciendo, qué compensación entre la simulación y el juego que está buscando, ya sea multijugador o no, etc.

Sean Middleditch
fuente
muchos juegos ni siquiera usan modelos para balas, sino que solo disparan un rayo como se mencionó para verificar una colisión, lo que puedes hacer es mostrar un modelo de arma diferente a otros jugadores que el que aparece en la vista de los jugadores actuales y alinearlo con el lugar donde está la bala es despedido con el personaje que parece apuntar hacia abajo
Matthew Pigram
Counter-Strike Source utiliza este método (tiene modelos de vista, jugador y mundo)
Matthew Pigram
-1

¿Qué hay de deshacerse de la retícula? Entonces, las balas podrían ir en línea recta desde el arma, como en la realidad. Apuntar hacia abajo significaría más, ya que alinearías el objetivo y el cañón del arma (menos unas pocas pulgadas en el modelo del jugador).

Jason Reed
fuente
Si bien muchos juegos hacen algo como esto, esta es una decisión de diseño muy amplia con implicaciones en la totalidad del ritmo y el combate del juego.
Katana314
Para mí, esto implica más evitar el problema que resolverlo.
Aaron