Jump to content
jeico008

masa interviene lanzamiento de proyectil, que hago?

Recommended Posts

buenas estoy haciendo lanzamientos de proyectil usando AddForce y tambien asignando las velocidades iniciales usando las formulas de física dependiendo de la distancia que elija, pero no consigo lograrlo ya que influye la masa del objeto, no se que formulas uso para la masa porque en internet no aclaran bien, alguien sabe de un tutorial?

Share this post


Link to post
Share on other sites

Este es un tema muy interesante a tratar con más profundidad para que todo el mundo lo comprenda. Se lo comenté al admin @francoe1

  • Like 2

Share this post


Link to post
Share on other sites
On 5/10/2020 at 6:07 AM, jeico008 said:

buenas estoy haciendo lanzamientos de proyectil usando AddForce y tambien asignando las velocidades iniciales usando las formulas de física dependiendo de la distancia que elija, pero no consigo lograrlo ya que influye la masa del objeto, no se que formulas uso para la masa porque en internet no aclaran bien, alguien sabe de un tutorial?

Si el problema es el AddForce (muy probable, porque los cambios directos de velocidad no influyen en esto) podés ignorar la masa de dos formas:

1 ------------------------------------------

La fuerza es el producto de la masa y la aceleración.

F = m * a   ---> a = F / m 

Cuando agregás una fuerza lo que estás haciendo es "acelerando considerando la masa". Si lo que querés es ignorar la masa, tenés que multiplicar esa fuerza por la masa. De esta forma (hablando de valores) la fuerza es equivalente a la aceleración.

Ej, se le aplica una fuerza de 10 N(Newton) a dos objetos, uno de 1kg y otro de 10kg de masa. Las aceleraciones te quedan:

F(1) = 10N = 1 kg * a ---> a = 10 m/s^2

F(10) = 10N = 10 kg * a ---> a = 1 m/s^2

Como ves la masa afecta. Si ahora multiplicas la fuerza aplicada por la masa:

F(1) = 10N * 1 = 10N = 1 kg * a ---> a = 10 m/s^2

F(10) = 10N * 10 = 100N = 10 kg * a ---> a = 10 m/s^2

2 ------------------------------------------

Existe una forma más fácil, si estás en 3D podés valerte del "ForceMode":

Force Add a continuous force to the rigidbody, using its mass.
Acceleration Add a continuous acceleration to the rigidbody, ignoring its mass.
Impulse Add an instant force impulse to the rigidbody, using its mass.
VelocityChange Add an instant velocity change to the rigidbody, ignoring its mass.

Probablemente el modo "Acceleration" es lo que buscas (muy seguramente opere igual que la solución 1).

 

  • Like 2

Share this post


Link to post
Share on other sites

Una duda que siempre tuve.

Los dos primeros modos, entiendo que no hay que multiplicarlos por Time.fixedDeltaTime,y que los dos últimos habría de considerar el fixedDeltaTime si quiero operar con ellos no?

En otras palabras: los dos primeros ya tienen en cuenta el fixedUpdate y están pensados para ser aplicados "continuamente", mientras que los dos últimos nos valen para aplicar cambios en un sólo frame?

Yo siempre hago las cuentas con el primer modo (Force) y luego me veo ajustando un poco las físicas "al gusto" con los diferentes parámetros, pero debo confesar que nunca he tenido esto claro.

Share this post


Link to post
Share on other sites

Creo que ninguno de ellos depende de un update constante. Otra cosa es que deban lanzarse desde el fixedupdate, que diría que todos. De todos modos y dependiendo del tipo de proyectil, utilizar un rigidbody es una mala opción. Para un tiro parabólico único estilo cañón o misil, no una ametralladora, vale. Pero para proyectiles tipo bala de un alto ratio de disparo, es una sobrecarga muy alta y la gravedad le afecta demasiado. Incluido el problema de la comprobación inherente y constante de colisión.

Share this post


Link to post
Share on other sites
7 hours ago, J Montes said:

Los dos primeros modos, entiendo que no hay que multiplicarlos por Time.fixedDeltaTime,y que los dos últimos habría de considerar el fixedDeltaTime si quiero operar con ellos no?

Los dos primeros están pensados como de 2 orden, es decir, están orientados a una aceleración (2do orden), que modifica una velocidad (1er orden), y esta a su vez una posición (orden 0).  Yo los pienso como una aceleración/cambio de velocidad ponderado/a. Los dos primeros de 2do orden, los últimos modos asociados al primer orden.

Creo que la confusión viene a la hora de definir un valor en concreto. Por ej, centrandonos en un valor (así se hace más intuitivo). Si tenés un cuerpo de m=1kg (así uso Accelerate y VelocityChange directamente) y le indicas un valor de 1 a ambos métodos, obtenés:

  • Accelerate = 1 m/s^2 (constante)---> va a incrementar su velocidad 1 m/s en 1 segundo (de ahí el m/s^2)
  • VelocityChange = 1 (un frame)---> va a incrementar su velocidad 1 m/s de un cuadro a otro.

Quizás por eso el temita del delta time (?). Fijate que el resultado claramente no es mismo, si consideras la velocidad vs el tiempo, en uno tenés un escalón de velocidad (de 1, para el ejemplo), cuando en el otro tenés una recta lineal con pendiente igual a la aceleración (1 en el caso del ejemplo). Uno está pensado para ser usado constantemente frame a frame, el otro para ciertos momentos (o no, acá podés ser creativo).

Caso super clásico, un salto. Si vas a saltar querés indicar una velocidad inicial (sea velocity change o impulse), en cambio si vas a usar Accelerate (o Force) vas a tener que apuntar a un valor muchisimo mayor, ya que la recta lineal deberá tener una pendiente muy grande para que de un frame a otro se refleje ese gran cambio de velocidad (con el escalón no tenés este problema). Eso sí, tenés que reducir este valor luego de realizar el salto (osea, no aplicarlo constantemente). Con VelocityChange no andas a las vueltas, indicas el valor deseado deseado para un frame y listo.

Por lo menos mi experiencia con ambos es esta.

 

Edited by lightbug
  • Like 2

Share this post


Link to post
Share on other sites

×
×
  • Create New...