Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Juan Abal en Octubre 12, 2016, 03:25:44 AM

Título: Ayuda please
Publicado por: Juan Abal en Octubre 12, 2016, 03:25:44 AM
Hola gente, publico aca por que me acabo de registrar y no se porque no me deja publicar en ninguna otra seccion... (bueno esa era una duda que me aparecio en el camino pero no es la que vine a plantear)
 
Resulta que estuve renegando mucho queriendo rotar un objeto 90 grados... la camara... mi problema no fue ese, sino que gira en seco... (directamente pasa de 0 a 90 en el momento), y lo que realmente quiero hacer es rotar la camara pero que rote lento, al añadirle el Time.deltaTime queda girando y no para, alguien me ayuda por favor con esto? en este momento tengo asi mas o menos el fragmento de codigo...
 

if (rotacion == true && rotor == "90")
            {
                salto = ;
                transform.Rotate(90, , );
                camara.transform.Rotate(, , 90);
                rotacion = false;
      }

 
aca esta mas completo si necesitan mas datos :D http://pastebin.com/bSH87LAU (http://pastebin.com/bSH87LAU)
Título: Ayuda please
Publicado por: Jose134 en Octubre 12, 2016, 06:55:08 PM
Cita de: Juan Abal date=1476235544Hola gente, publico aca por que me acabo de registrar y no se porque no me deja publicar en ninguna otra seccion... (bueno esa era una duda que me aparecio en el camino pero no es la que vine a plantear)
   
   
      Resulta que estuve renegando mucho queriendo rotar un objeto 90 grados... la camara... mi problema no fue ese, sino que gira en seco... (directamente pasa de 0 a 90 en el momento), y lo que realmente quiero hacer es rotar la camara pero que rote lento, al añadirle el Time.deltaTime queda girando y no para, alguien me ayuda por favor con esto? en este momento tengo asi mas o menos el fragmento de codigo...
   
   

if (rotacion == true && rotor == "90")
            {
                salto = ;
                transform.Rotate(90, , );
                camara.transform.Rotate(, , 90);
                rotacion = false;
      }

   
      aca esta mas completo si necesitan mas datos :D http://pastebin.com/bSH87LAU (http://pastebin.com/bSH87LAU)
   


Para rotar suavemente debes usar Quaternion.Slerp o Quaternion.Lerp
 
https://docs.unity3d.com/ScriptReference/Quaternion.Slerp.html (https://docs.unity3d.com/ScriptReference/Quaternion.Slerp.html)
 
https://docs.unity3d.com/ScriptReference/Quaternion.Lerp.html (https://docs.unity3d.com/ScriptReference/Quaternion.Lerp.html)
 
 
 
Si no te sale con la documentacion dilo y ya te ayudamos mas :P
 
Buena suerte
Título: Ayuda please
Publicado por: Juan Abal en Octubre 13, 2016, 01:12:20 PM
Cita de: Jose134 date=1476291308Para rotar suavemente debes usar Quaternion.Slerp o Quaternion.Lerp
   
   
      https://docs.unity3d.com/ScriptReference/Quaternion.Slerp.html (https://docs.unity3d.com/ScriptReference/Quaternion.Slerp.html)
   
   
      https://docs.unity3d.com/ScriptReference/Quaternion.Lerp.html (https://docs.unity3d.com/ScriptReference/Quaternion.Lerp.html)
   
   
       
   
   
      Si no te sale con la documentacion dilo y ya te ayudamos mas :P
   
   
      Buena suerte
   


gracias hermano, nunca entendi bien a los quaternion... pero esto esta facil, el tema es que, le mando el from, pero no se como asignar el to... y le mande un vector3 con las coordenadas, y me tiro para cualquier lado, despues le mande un quaternion con las coordenadas, y me pidio que le asigne algo en "W", (lo cual puse en 0) y la rotacion me la tira a la X y no a la Y, algo estoy haciendo mal...
 
 
 
 
 

camara.transform.rotation = Quaternion.Lerp(startposition.rotation, endposition.rotation, velocidadRotacionCamara * Time.deltaTime);
                velocidadRotacionCamara += 0.1f;
                if (velocidadRotacionCamara > 10)
                {
                    rotacion = false;
                }

 
asi lo deje, pero no se que asignarle a endposition... me das una manito?
Título: Ayuda please
Publicado por: Jose134 en Octubre 13, 2016, 03:01:02 PM
Cita de: Juan Abal date=1476357140gracias hermano, nunca entendi bien a los quaternion... pero esto esta facil, el tema es que, le mando el from, pero no se como asignar el to... y le mande un vector3 con las coordenadas, y me tiro para cualquier lado, despues le mande un quaternion con las coordenadas, y me pidio que le asigne algo en "W", (lo cual puse en 0) y la rotacion me la tira a la X y no a la Y, algo estoy haciendo mal...
   
   
       
   
   
       
   
   

camara.transform.rotation = Quaternion.Lerp(startposition.rotation, endposition.rotation, velocidadRotacionCamara * Time.deltaTime);
                velocidadRotacionCamara += 0.1f;
                if (velocidadRotacionCamara > 10)
                {
                    rotacion = false;
                }

   
      asi lo deje, pero no se que asignarle a endposition... me das una manito?
   


Para pasar de las rotaciones que nosotros conocemos (euler), donde expresamos cuantos grados rotamos cada eje, a quaternions hay que usar el metodo Quaternion.Euler()
 
Basicamente le pasas un Vector3 con la rotacion en euler y te da el quaternion que representa esa misma rotacion
 
 
 
Por si hay algo que no te haya quedado claro sobre el Lerp aqui tienes un codigo de ejemplo:
 

private Quaternion startRot; //Rotacion de la que partimos
public Vector3 targetRot; //Rotacion que queremos conseguir
private float progress; //Progreso del Lerp (0 = startRot; 1 = targetRot)
public float speed; //Velocidad
private void Awake () {
startRot = transform.rotation; //Detectamos de que rotacion partimos
}
private void Update () {
transform.rotation = Qutarnion.Lerp(startRot, Quaternion.Euler(targetRot), progress); //Ponemos la nueva rotacion
progress += Time.deltaTime * speed; //Aumentamos el progreso
}