Noticias

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

Tiempo de caida

Iniciado por ramunda, Julio 01, 2016, 12:28:37 PM

Tema anterior - Siguiente tema
Buenos dias , agradeceria una idea de como hacer que un árbol al caer caiga despacio y no de golpe como me esta pasando.
 
Estoy usando trasnform.Rotate con un float de speed para el ángulo y demás , también he probado con el drag de el rigidbody pero sin éxito.
 
Alguna idea por favor?
 
 
 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class vidaenemiga : MonoBehaviour {
public static float vida = 5;
public Animation anim;
public float tiempocaida;
public AudioClip audio1;
AudioSource audio;
private bool arbolmuerto;
public GameObject tree;
public float speed =12f;
 
void Start()
{
audio = GetComponent<AudioSource> ();
tree = this.gameObject;
//GetComponent<Rigidbody>().isKinematic = true;
}
void Update ()
{
   if (vida <= 0f) {
      if (!arbolmuerto)
         arbolanima ();
      {
      }
   }
}
void arbolanima ()
{
   arbolmuerto = true;
   audio.PlayOneShot (audio1, 0.3F);
   //anim.play ("arbolanim");
   Debug.Log ("arbol caeee");
   //GetComponent<Rigidbody> ().drag = 50;
   transform.Rotate(Vector3.back,110*speed*Time.deltaTime);
   Invoke ("destruir",7);
}
       void destruir()
{
 
   Destroy(gameObject);
}
}
             
   
   

 
 
 
 
 
 
 
 
 
 

si usas transform no estas usando fisicas, entonces el drag te sirve de sombrero... para hacer que gire lento reduce la velocidad "speed"

Buenas Ramunda, capaz con Quaternion.Slerp podes resolverlo, lo que si tendrías que modificar un poco el diseño ya que se debería ejecutar varias veces la función dentro del update.
 
Te dejo el link de documentación.
 
https://docs.unity3d.com/ScriptReference/Quaternion.Slerp.html
 
Saludos!

Julio 02, 2016, 12:23:26 AM #3 Ultima modificación: Julio 02, 2016, 06:17:13 AM por pioj
Cita de: Braltor date=1467386626si usas transform no estas usando fisicas, entonces el drag te sirve de sombrero... para hacer que gire lento reduce la velocidad "speed"
   


Gracias por la respuesta Braltor, se me fue un poco la mano con el 110...le puse 1, pero la cosa esque apenas se inclina, osea apenas cae unos milimetros no cae hasta el suelo y con el 110 por error...si llegaba al suelo a una velocidad de espanto pero llegaba.
 
Cita de: DrioN date=1467387378Buenas Ramunda, capaz con Quaternion.Slerp podes resolverlo, lo que si tendrías que modificar un poco el diseño ya que se debería ejecutar varias veces la función dentro del update.
   
   
      Te dejo el link de documentación.
   
   
      https://docs.unity3d.com/ScriptReference/Quaternion.Slerp.html
   
   
      Saludos!
   


DrioN gracias a ti también por la respuesta, mira por donde entre lo del speed de Braltor y lo que me has dicho de el update.....me habeis abierto los ojos!!
 
Para empezar tenía mal esto:
 

transform.Rotate(Vector3.back,110*speed*Time.deltaTime);

 
el orden de los factores SI altera el resultado, la manera correcta es:
 



   
      transform.Rotate(Vector3.back,5*Time.deltaTime*speed); ////GRACIAS Braltor por tu consejo llegue a esto.
   

[/quote]
 
Luego DrioN dijo: 
 
ya que se debería ejecutar varias veces la función dentro del update.
 
Efectivamente , necesita una rotación constante sobre el eje, así que la formula correcta es:
 

void Update ()
{
   if (vida <= 0f) {
   if (!arbolmuerto)
   arbolanima ();
   transform.Rotate(Vector3.back,5*Time.deltaTime*speed);
      {
      }

 
Así rota perfectamente, si quiero mas rápido cambio valores de speed o delta time y listo.
 
y para determinar si toca el suelo y no liarme con Raycast simplemente acortamos el tiempo de :
 



   
      Invoke ("destruir",7); donde 7 son los segundos y destruimos el GO, :)
   

[/quote]
 
No me deja poner 2 Best Answers pero que quede claro que las 2 me han ayudado mucho por igual.
 
 
 
Gracias Braltor y DrioN !!!!

Etiquetas: