¿Cómo asegurarse de que los objetos giratorios golpeen un objetivo con el extremo derecho?

25

Estoy trabajando en un arma de tipo cuchillo arrojadizo donde un jugador apunta libremente y luego arroja un cuchillo. El cuchillo gira por el aire y al chocar deja de girar y se dirige al objeto con el que chocó. El giro se maneja a través de la animación, mientras que el camino del cuchillo es manejado por la física.

Un problema que estoy enfrentando es cómo asegurarme de que cuando el cuchillo choca con un enemigo, el cuchillo se enfrentará hacia ellos. En este momento, lo que sucede a veces es que el cuchillo se incrusta primero en un mango enemigo. Lo que obviamente no es realista. Al mismo tiempo, creo que sería bastante irracional que el cuchillo solo "golpeara" al enemigo si chocaba primero con la hoja, ya que la velocidad a la que gira el cuchillo está fuera del control del jugador.

He estado viendo muchas imágenes lentas de killcam de armas similares y cada vez que se lanza el arma, gira por el aire y mágicamente siempre termina con la hoja apuntando a su objetivo. Para un juego donde la distancia de lanzamiento será consistente, esto es bastante sencillo de hacer. Pero no estoy muy seguro de cómo predecir esto, ya que hay muchos factores impredecibles involucrados, por ejemplo. dirección del cuchillo, rotación del cuchillo, posición del enemigo, distancia del enemigo, etc. Si es posible, preferiría no tener que usar una lógica de predicción compleja ya que el juego será para dispositivos de nivel bastante bajo. ¿Existe una forma de "humo y espejos" para resolver esto?

Ejemplo: https://youtu.be/0fav8lFpBko?t=42s

Interfaz
fuente
15
El cuchillo que siempre golpea primero una hoja objetivo tampoco es realista, en particular cuando hablamos de un objetivo en movimiento.
Theraot
1
Dependiendo del sabor del juego, hay varios estilos de lanzamiento de cuchillos que no hacen girar la hoja. Sin embargo, generalmente usan cuchillos diseñados específicamente para volar de manera estable.
Perkins
Si el centro de masa de la cuchilla está significativamente más cerca del extremo del mango en lugar del extremo de la cuchilla, y la velocidad de rotación de la cuchilla es mucho mayor que su velocidad de desplazamiento, entonces podría golpear el objetivo con la cuchilla siempre. sin embargo, sería un cuchillo muy extraño, y una criatura muy extraña que puede lanzarlo así
Sarge Borsch
2
Este tema es lo suficientemente prominente como para que haya un artículo de TVTropes al respecto: The Blade Always Lands Pointy End In
Mason Wheeler
También me gusta la distinción hecha en la pregunta. Si cambiaste la rotación para que también sea manejada por el motor de física, es posible que tengas suficiente información para hacer un cálculo en el momento de la colisión para ver si el extremo de la cuchilla estaba mirando al objetivo lo suficientemente bien o no. O eso, o mantener la animación, y simplemente hornear previamente los valores donde las animaciones del cuchillo apuntan hacia adelante y comparar el cuadro de animación actual para ver si está dentro de ese rango o no.
Pysis

Respuestas:

35

Fíngelo

Mira el video que vinculaste, míralo en cámara lenta ... eh, ¿qué es eso? La cámara salta al final y el cuchillo ya está en el casco del objetivo.

Solo fingelo. Una vez que la distancia del cuchillo al objetivo es pequeña, salta cortando al cuchillo mágicamente en el objetivo.

Editar: puede verificar si golpeará un objetivo usando la predicción enrevesada, y luego pretender que golpeó la hoja primero, luego muestre una animación donde el objetivo no se mueve y el cuchillo lo mata.


La predicción enrevesada

ya que la velocidad a la que gira el cuchillo está fuera del control del jugador.

Eso es correcto. Está más allá del control del jugador. Sin embargo, no está fuera de tu control ...

Si puede calcular la distancia que debe recorrer la cuchilla, puede hacer que la velocidad de rotación sea tal que la cuchilla golpee primero la cuchilla.

Ahora, no tiene sentido hacer esta predicción en pleno vuelo, porque el cuchillo tendría que ajustarse si un obstáculo se interpone en el camino. Por lo tanto, lo harías cuando lances.

El hecho de que tengas que seguir una ruta parabólica para golpear la prueba lo hace más complicado que un simple molde de rayos. Sugeriría obtener la ecuación para el movimiento parabólico que corresponde al lanzamiento del cuchillo, y evaluarla a intervalos determinados.

También es posible encontrar la distancia de los obstáculos a la parábola, encontrando el punto más cercano en la parábola a la posición del obstáculo, y luego hacer una verificación de colisión con ese punto.

Una vez que sepa cuánto tiene que viajar el cuchillo, puede dividirlo en un número entero de rotaciones, de modo que primero golpee la hoja. Editar: o un entero 0.5 dependiendo de cómo lo lances.

Por supuesto, los obstáculos se habrían movido en el momento en que el cuchillo llegue allí ...


Ser realista

No harás que la cuchilla golpee la hoja el 100% de las veces, en particular con objetivos en movimiento. Simplemente abrace eso, un cuchillo arrojadizo no es un arma confiable. Por lo tanto, tenga la alternativa de hacer que rebote cuando golpee el mango primero. Puede verificar si golpeó el mango primero verificando su orientación y comparándolo con la dirección del punto de colisión.

Theraot
fuente
1
Ah, no vi el corte de salto, qué inteligente pero tan simple. Es muy obvio cuando lo vi cuadro por cuadro como lo sugirió.
FrontEnd
14

Si sabe de antemano dónde aterrizará el cuchillo, como en las imágenes de la cámara de matar, que definitivamente se produce después del hecho, simplemente calcule la velocidad de rotación correcta en función de la distancia de vuelo y el número de rotaciones deseadas. Los cuchillos de lanzamiento dejan al lanzador con la empuñadura primero, por lo que debe rotar N + 0.5 rotaciones completas 1 , donde N generalmente es al menos 1, pero podría basarse más en el nivel de habilidad del lanzador o en lo genial que quieres que se vea: más giros = más cool.

Si no lo hace, está bien hacer trampa arreglando la rotación al golpear y tal vez ocultarlo con una salpicadura de sangre. Como un mago, si lo haces lo suficientemente rápido, el jugador no se dará cuenta.

Por supuesto, nada de esto es realista. En la vida real, lanzar cuchillos es realmente difícil y requiere mucha práctica si quieres que el cuchillo caiga primero. El lanzador debe ser plenamente consciente de la distancia y alterar su lanzamiento en consecuencia, de lo contrario, el cuchillo golpeará primero la empuñadura.

1 : Hay algunos estilos en los que el cuchillo también va primero con la cuchilla.

congusbongus
fuente
44
+1: salpicaduras de sangre. Bien, trucos de magia. Editar: o una nube de polvo para la edición sin gore.
Theraot
2
@Theraot y / o hacen que la velocidad de giro sea lo suficientemente rápida como para que el espectador realmente no pueda hacer un seguimiento de hacia dónde apunta.
Perkins
14
  1. Calcule la distancia en línea recta al objetivo.

  2. Cada cuadro establece el ángulo de la cuchilla en 2PI * (restantesStraightLineDistance) / (originalStraightLineDistance) * DesiredNumRotations.

La relación de giro variará ligeramente si no mueve el cuchillo en línea recta, pero nadie lo notará.

Si no predetermina el objetivo (es decir, solo está lanzando y usando física para ver lo que golpea), entonces deberá evitar esto, pero puede usar el mismo principio de mirar qué objetivo es probable que golpee y ajustando el giro para que sea correcto para ese objetivo.

Tim B
fuente
4

Los cuchillos de lanzamiento reales están diseñados para tener una probabilidad muy alta de golpear la cuchilla primero. Diseña tus cuchillos en consecuencia.

Colección de cuchillos arrojadizos de Wikipedia : Colección de cuchillos arrojadizos de wikipedia

Desea el centro de masa y, por lo tanto, el centro de rotación, lo más lejos posible de la punta de la cuchilla . Esto aumentará las probabilidades de que la cuchilla gire hacia la posición de golpe antes de que llegue el final del mango.

La cuchilla es típicamente larga y delgada, para sobresalir lo más posible del centro de masa y agregar la menor masa posible. Además, a menudo hay un contrapeso esférico o en forma de disco al final del mango, que curiosamente no veo en ninguno de los cuchillos de la imagen de Wikipedia.

El cuchillo se lanza sosteniendo la punta de la hoja y arqueando el mango en la dirección del lanzamiento.

dotancohen
fuente
2

Para una forma de "humo y espejos", puede tener el centro de rotación del cuchillo (es decir, el centro de masa) cerca del mango (es decir, la parte no puntiaguda). De esta manera, si la velocidad de rotación es lo suficientemente alta en comparación con la velocidad de la cuchilla, se puede garantizar que la punta de la hoja colisionará con el objetivo y no con ninguna otra parte.

Hay algunos cálculos para obtener cuál es la velocidad de rotación mínima dado el centro de masa y las dimensiones, pero debe ser sencillo. Tenga en cuenta también que esto no implica nada sobre el ángulo del golpe.

Guido
fuente
1

¿Perfecto lanzador de cuchillos?

Por el momento, dices que estás girando el cuchillo a través de la animación. ¿Qué parámetro estás usando para controlar el ángulo? ¿Número de cuadro? ¿Tiempo de juego? Escalado por una velocidad de giro arbitraria?

Si, en cambio, usó el parámetro (distancia movida) / (distancia total al objetivo), con la escala apropiada por pi y (número de vueltas + 0.5), entonces el cuchillo siempre llegaría mágicamente al punto primero.

Neil_UK
fuente
La primera parte de esta pregunta parece pedir una aclaración. Probablemente debería hacerse como comentarios sobre la pregunta. ¿Podría elaborar su método propuesto para llegar mágicamente al punto primero? Por ejemplo, usted dice "con la escala apropiada por pi"; ¿Qué escala? Es justo suponer que si el usuario tiene que preguntar, es posible que no entienda cuál sería la escala adecuada.
Gnemlock
@TimB hizo un mejor trabajo al explicarlo, pero la solución propuesta por Neil es un buen enfoque. Modifique la velocidad de la animación de su cuchillo giratorio para que cuando llegue al objetivo el cuchillo esté en la posición "el extremo puntiagudo va en la posición del otro hombre". Esto es mucho más fácil (programar, Y computacionalmente) que calcular trayectorias parabólicas que involucran objetivos en movimiento, etc. En cuanto a "la escala apropiada por PI" que probablemente sea solo 2, dado que number_of_revolutions es otra variable en la pseudoequuación de Neil. Si se trata de animación de fotogramas clave, simplemente escala su índice y se olvida de pi.
AC