Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Tornado de Arena

Iniciado por Jardem, Noviembre 01, 2019, 08:30:49 PM

Tema anterior - Siguiente tema
Buenas, para un juego quiero hacer un escenario que sea un desierto, y he pensado en meter tornados de arena, lo he hecho mediante partículas. Os dejo aquí un vídeo.
 
https://imgur.com/v4h9HaZ
 
Me gustaría hacer un script para que si por ejemplo una bola entra en el tornado se vaya volando(también puedo crear una animación con el player y que de vueltas por el tornado hasta salir volando), la cuestión es que no tengo ni idea de cómo hacerlo, si alguien sabe alguna forma se lo agradecería mucho.
 
Gracias de antemano!
 
 
 
 
 
 

Hola Jardem.


No tengo ningún script así a mano, pero sin duda veo seguro la necesidad de programar un poco para que ese efecto ocurra. La idea que me viene a la cabeza es la siguiente:


- Creas un trigger, un cubo o un cilindro y lo pones donde esté el tornado. Este objeto le creas un script, para que cuando la bola entre ahí, pues empiece el efecto.
 
- En el script, al ser un trigger, puedes usar las funciones de trigger en vez de la Start y Update de siempre.

Las funciones de trigger que me refiero son las siguientes:
 


OnTriggerEnter: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html  (Se dispara cuando el collider de la bola entra en el trigger)
 
OnTriggerExit: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerExit.html (Se dispara cuando el collider de la bola sale del trigger)
 
OnTriggerStay: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerStay.html (Se dispara en cada frame mientras el collider de la bola esté dentro del trigger)
 
Depende de como sea el script de control de la bola, puede que tengas que hacer contrarrestar más cosas o menos, pero con esas funciones deberías poder tener algo más de control.
 
 
 
- Si por ejemplo, el controlador de la bola es el rigidbody estándar de Unity, pues podrías hacer que en el OnTriggerStay, la bola recibiera una fuerza que la mueva. (El vector de dirección de la fuerza, podría variar con el tiempo, quizás la Y sea siempre hacia arriba, pero la X,Z podría estar cambiando dependiendo del ángulo para que la bola vaya recorriendo un círculos mientras está dentro del tornado , las fórmulas trigonométricas creo que serían las siguientes:
 

Dado el ángulo "A"
y el radio "r"
X = cos (A) * r
Z = seno(A) * r

 
La función para mover la bola debería ser AddForce en el OnTriggerStay, aunque no recuerdo qué modalidad habría que ponerle en el "ForceMode" (A penas uso el Rigidbody :(   )
 
https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
 
https://docs.unity3d.com/ScriptReference/ForceMode.html  (Yo creo que "Force" debería valer, pero prueba con los 4 por si acaso).
 
 

@Antonio creo que el Impulse sería el adecuado. 

Cita de: Antonio date=1572660014Hola Jardem.


      No tengo ningún script así a mano, pero sin duda veo seguro la necesidad de programar un poco para que ese efecto ocurra. La idea que me viene a la cabeza es la siguiente:


      - Creas un trigger, un cubo o un cilindro y lo pones donde esté el tornado. Este objeto le creas un script, para que cuando la bola entre ahí, pues empiece el efecto.
   
   
      - En el script, al ser un trigger, puedes usar las funciones de trigger en vez de la Start y Update de siempre.

      Las funciones de trigger que me refiero son las siguientes:
   
   
      

      OnTriggerEnter: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html  (Se dispara cuando el collider de la bola entra en el trigger)
   
   
      OnTriggerExit: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerExit.html (Se dispara cuando el collider de la bola sale del trigger)
   
   
      OnTriggerStay: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerStay.html (Se dispara en cada frame mientras el collider de la bola esté dentro del trigger)
   
   
      Depende de como sea el script de control de la bola, puede que tengas que hacer contrarrestar más cosas o menos, pero con esas funciones deberías poder tener algo más de control.
   
   
       
   
   
      - Si por ejemplo, el controlador de la bola es el rigidbody estándar de Unity, pues podrías hacer que en el OnTriggerStay, la bola recibiera una fuerza que la mueva. (El vector de dirección de la fuerza, podría variar con el tiempo, quizás la Y sea siempre hacia arriba, pero la X,Z podría estar cambiando dependiendo del ángulo para que la bola vaya recorriendo un círculos mientras está dentro del tornado , las fórmulas trigonométricas creo que serían las siguientes:
   
   

Dado el ángulo "A"
y el radio "r"
X = cos (A) * r
Z = seno(A) * r

   
      La función para mover la bola debería ser AddForce en el OnTriggerStay, aunque no recuerdo qué modalidad habría que ponerle en el "ForceMode" (A penas uso el Rigidbody :(   )
   
   
      https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
   
   
      https://docs.unity3d.com/ScriptReference/ForceMode.html  (Yo creo que "Force" debería valer, pero prueba con los 4 por si acaso).
   
   
       
   


Se me olvidaba, ¡muchas gracias! Al final he utilizado varias diferentes(Impulse, Force y VelocityChange si no recuerdo mal), le he dado una fuerza en Y en el Enter, diferentes fuerzas, vectores y rotaciones en los 3 ejes para simular un movimiento en el Stay y otra fuerza con un vector y rotaciones aleatorias para expulsarlo en el Exit.

Cita de: Jardem date=1573558585Se me olvidaba, ¡muchas gracias! Al final he utilizado varias diferentes(Impulse, Force y VelocityChange si no recuerdo mal), le he dado una fuerza en Y en el Enter, diferentes fuerzas, vectores y rotaciones en los 3 ejes para simular un movimiento en el Stay y otra fuerza con un vector y rotaciones aleatorias para expulsarlo en el Exit.
   


Eso suena incluso mejor Jardem. me alegro que te haya salido el efecto.

Etiquetas: