Jump to content
UnitySpain
Mimo

Rotación caída de flecha

Recommended Posts

Buenas estimados, les comento la situación el la que me encuentro, el tema es que soy nuevo en scripting de Unity y estoy haciendo un juego de disparo con ballesta, tengo una flecha la cual sale proyectada desde la ballesta (obviedades gratis sisi) y en ese momento activo la gravedad de la flecha la cual cae formando una parábola, hasta ahí todo como corresponde, pero el objeto flecha en todo momento se encuentra en el angulo de inicio que lo hereda de la ballesta, y lo que quiero hacer es que a medida que la parábola avance la flecha tome la rotación de la misma, según mi forma de verlo, debería calcular el trayecto del proyectil y en base a eso modificar la rotación, el problema es que no se por donde partir investigando y si estoy bien enfocado, tampoco pretendo inventar la rueda. Por eso es que vengo en búsqueda de sus consejos, si alguien me puede echar un cable de cual sería la solución lógica de como hacerlo se lo agradecería.

Si necesitan mayor referencias o el codigo que llevo o cosas por el estilo avisen, no lo coloco por que no le veo relevancia.

Gracias de antemano y saludos!

Share this post


Link to post
Share on other sites

No debería ser un deltaAngle(flecha, suelo) , o algo parecido?

Share this post


Link to post
Share on other sites

Lo de "la flecha tome la rotación de la misma". Qué rotación? Qué rote sobre si misma? Y que herede el/los ángulo/s de la ballesta es lógico para que salga correctamente y en la dirección que le corresponde. Y no deberías tener que la trayectoria previamente, si no como un misil (fire and forget).

La flecha no será un child de la ballesta verdad?

No lo acabo de entender bien.

Share this post


Link to post
Share on other sites
2 hours ago, iRobb said:

Lo de "la flecha tome la rotación de la misma". Qué rotación? Qué rote sobre si misma? Y que herede el/los ángulo/s de la ballesta es lógico para que salga correctamente y en la dirección que le corresponde. Y no deberías tener que la trayectoria previamente, si no como un misil (fire and forget).

La flecha no será un child de la ballesta verdad?

No lo acabo de entender bien.

Perdona creo que mi explicación fue un poco pobre para darme a entender, si, la flecha es un child de la ballesta.  

Lo que sucede es que si el jugador dispara apuntando 10° en x, y pensándolo como un cilindro alargado que tiene la punta de la flecha "mirando al cielo" y la cola de la flecha que está en la parte inferior,  la flecha hace su trayectoria hasta colisionar con el suelo, el trayecto que hace esta bien va de la posición "a" a la posición "b" teniendo una altura máxima y después descendiendo de manera uniforme hasta colisionar con el suelo. A esto me refiero con parábola de trayectoria.

Al momento de colisionar en el suelo lo que me pasa es que la flecha sigue estando 10° en x, con la punta de la flecha aún mirando hacia el cielo.

Lo que quiero conseguir hablando lo más bruto posible es que la flecha caiga de punta como sucedería en la realidad, es decir que la flecha al iniciar su trayectoria su rotación sea 10° en x, en el punto medio de la parábola de trayectoria sea 0° y en la colisión sea -10° con la punta mirando al suelo y la cola de la flecha en un angulo superior. A eso me refiero al decir que tome la rotación de la parábola, tal vez sería mejor decir que tome el angulo de la trayectoria. 

Espero que ahí se entienda mejor la idea, y perdón por no poder plasmar mejor la idea, tengo un lio asqueroso en la cabeza );

Share this post


Link to post
Share on other sites

Claro. Al ser un child de la ballesta cualquier orientación que tenga la ballesta le va a afectar a la flecha, por ejemplo esos 10 grados en x heredados de la ballesta.

De entrada la flecha tiene que ser un gameobject independiente que al ser lanzada tome los datos de la transform de la ballesta (position, rotation) y luego le añades el impulso al rigidbody de la flecha. Esto hará que sea independiente. Además así le podrás colocar una rotation local (en z) a la flecha para que gire sobre sí misma.

Hay que ponerle una masa adecuada a la flecha. Dado que, como es normal, la cabeza tiene que tener más peso, le añadiría otro rigidbody con masa a la punta. O sea la flecha tendría la parte frontal como child de la flecha para que el centro de gravedad esté más adelante. Y luego a jugar con los números entre impulso sobre la flecha, masa de la flecha y masa de la punta.

Edited by iRobb

Share this post


Link to post
Share on other sites

Que grande! gracias por la respuesta, voy tratar de hacerlo de esa manera.

Share this post


Link to post
Share on other sites

Yo hice algo parecido pero sin usar la simulación, no confio mucho en ella, así que hice que la flecha simplemente pise su propia rotación mirando siempre en la dirección del vector de velocidad.

Primero tenés tu flecha bien orientada (el forward es la punta de la flecha), luego con Quaternion.LookRotation determinas una rotación deseada (teniendo en cuenta el vector de velocidad del rigidbody), finalmente aplicás dicha rotación en FixedUpdate con rigidbody.MoveRotation (sí, un nombre de mierda). Si querés hacer las cosas de forma más suavizada podés "Lerpear" con Slerp la rotación actual vs la deseada.

Share this post


Link to post
Share on other sites

×