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
Respuestas:
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
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.
fuente
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.
fuente
Calcule la distancia en línea recta al objetivo.
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.
fuente
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 :
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.
fuente
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.
fuente
¿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.
fuente