Noticias

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

Rotacion Tag

Iniciado por R3N3, Junio 05, 2017, 04:17:56 AM

Tema anterior - Siguiente tema
Hola amigos, tengo una duda, haber si alguien me puede ayudar: Se supone que a la rotacion del objeto, en este caso = (0,0,0), se le modifique en Y sumando 90 grados. Deberia dar una nueva rotacion = (0,90,0) , Para luego hacer una interpolacion entre estas rotaciones. Por alguna misteriosa razon me suma 180 grados y no 90, que puede estar pasando?  
 
 
 

public Quaternion rotacionAcambiar;
public Quaternion rotacionDeseada;
public bool rotar;
void Start(){
bool rotar = false;
}
 
void Update(){
if (rotar){
transform.rotation = Quaternion.Lerp(transform.position.rotation, rotacionDeseada.eulerAngles, 2*Time.deltaTime);
}
 
if(Input.getKeyDown(KeyCode.E)){
rotacionAcambiar = transform.position.rotation;
rotacionDeseada = new Quaternion(rotacionAcambiar.x, rotacionAcambiar.y + 90, rotacionAcambiar.z, rotacionAcambiar.w);
rotar = true;
}

 
 

Junio 05, 2017, 07:01:22 AM #1 Ultima modificación: Junio 05, 2017, 07:34:46 AM por pioj
No se si estas usando C#, aparentemente lo que tienes escrito no podría funcionar, tiene diversos errores. Ni siquiera se tendría que poder ejecuta. Ignoro si versiones antiguas funcionan de manera diferente.
 



   
      bool rotar = false;
   

[/quote]
 
Estas declarando una variable local que nunca se usa.  Entiendo que debería ser rotar = false para usar la variable publica rotar.
 
yo que sepa  transform.position.rotation no existe, se esta haciendo referencia a una propiedad que no deriva de posición.
 
Si lo que quieres es rotar un objeto,  como ejemplo:
 



   
      transform.Rotate(0, 90, 0); o transform.Rotate(Vector3.up * Time.deltaTime);
   

[/quote]
 
Aunque puedo interpretar mal tus intenciones, entiendo que lo que quieres simplemente es rotar un objeto.

Hola, te recomiendo usar euler angles para las rotaciones. He cambiado todos los Quaternions a Vector3 y he hecho que rotacionAcambiar sea una variable local (no tenía sentido declararla fuera de ese if). La variable rotar solo tiene sentido si quieres ahorrar recursos (para que no haga el Lerp en todos los frames), si te da igual yo la quitaría ya que tal y como está ahora al apretar una vez ya entra siempre dentro del if...
 

public Vector3 rotacionDeseada;
public bool rotar;
void Start(){
bool rotar = false;
rotacionDeseada = transform.eulerAngles;
}
 
void Update()
    {
        if (rotar)
        {
            transform.eulerAngles = Vector3.Lerp(transform.eulerAngles, rotacionDeseada, 2 * Time.deltaTime);
        }
 
        if (Input.getKeyDown(KeyCode.E))
        {
            Vector3 rotacionAcambiar = transform.eulerAngles;
            rotacionDeseada = new Vector3(rotacionAcambiar.x, rotacionAcambiar.y + 90, rotacionAcambiar.z);
            rotar = true;
        }
    }

 
Espero que te ayude, saludos.

Junio 05, 2017, 03:16:58 PM #3 Ultima modificación: Junio 05, 2017, 03:19:19 PM por lightbug
Un quaternion no es lo mismo que un vector3, como dice @TheBullet si queres poner angulos podes usar eulerangles.
 
Tampoco entiendo porque el tener rotacion a cambiar y deseada, si queres tener un efecto suavizado tenes que tener un elemento mas, el elemento exacto que se mueve sin lerp, y el suavizado (el propio transform) que sigue al anterior.
 



   

rotacionAcambiar = transform.position.rotation;
rotacionDeseada = new Quaternion(rotacionAcambiar.x, rotacionAcambiar.y + 90, rotacionAcambiar.z, rotacionAcambiar.w);

   
       
   

[/quote]
 
eso tiene poco sentido, primero porque pusiste transform.position.rotation y segundo, usa directamente en el argumento de r.deseada el rotation o el eulerangle, estas re definiendo cosas que ya estan ahi para usar.
 
 
 
En definitiva en tu codigo tiene que haber (en Update)
 
1- una parte que detecte entradas y que rote el rotation target, es mas te podes olvidar de los rotation o eulerangles, simplemente usa transform.Rotate:
 
https://docs.unity3d.com/ScriptReference/Transform.Rotate.html
 
Le pasas el eje, por ejemplo Vector3.up y el segundo argumento es el angulo, para invertir el sentido de rotacion o le invertis el eje (down) o le das valores negativos (mas prolijo)
 
2 - una parte que diga, toma el transform.rotate y hage el Slerp con el rotation target. Se usa Slerp porque estas haciendo un Lerp con Quaternions (transform.rotation's)
 
saludos
 
 
 
 
 
 

Perdón Perdón, Perdón a  http://www.unityspain.com/profile/29821-thebullet/?do=hovercard" data-mentionid="29821" href="<___base_url___>/profile/29821-thebullet/" id="ips_uid_2326_7" rel="" style="">@TheBullet , @lightbug y a @Miguel_Angel Como hice el script sin editor no me di cuenta de lo que escribía mal, primero transform.position.rotation es una aberración, lo siento se me fue la musa.
 
En segundo lugar me acabo de dar cuenta que estoy sumándole 90 grados al Quaternion directamente y esos no son los valores con los que trabaja el Quaternion. ahora voy a corregirlo y ver si me funciona. Gracias por su ayuda y disculpas por ponerle un código tan malo, me da vergüenza.

Cita de: R3N3 date=1496694035Perdón Perdón, Perdón a  http://www.unityspain.com/profile/29821-thebullet/?do=hovercard" data-mentionid="29821" href="<___base_url___>/profile/29821-thebullet/" id="ips_uid_2326_7" rel="" style="">@TheBullet , @lightbug y a @Miguel_Angel Como hice el script sin editor no me di cuenta de lo que escribía mal, primero transform.position.rotation es una aberración, lo siento se me fue la musa.
   
   
      En segundo lugar me acabo de dar cuenta que estoy sumándole 90 grados al Quaternion directamente y esos no son los valores con los que trabaja el Quaternion. ahora voy a corregirlo y ver si me funciona. Gracias por su ayuda y disculpas por ponerle un código tan malo, me da vergüenza.
   


jaj no pasa nada, era seguro que lo habias hecho desde aca mismo porque sino no te compila nada

Cita de: R3N3 date=1496694035Perdón Perdón, Perdón a  http://www.unityspain.com/profile/29821-thebullet/?do=hovercard" data-mentionid="29821" href="<___base_url___>/profile/29821-thebullet/" id="ips_uid_2326_7" rel="" style="">@TheBullet , @lightbug y a @Miguel_Angel Como hice el script sin editor no me di cuenta de lo que escribía mal, primero transform.position.rotation es una aberración, lo siento se me fue la musa.
   
   
      En segundo lugar me acabo de dar cuenta que estoy sumándole 90 grados al Quaternion directamente y esos no son los valores con los que trabaja el Quaternion. ahora voy a corregirlo y ver si me funciona. Gracias por su ayuda y disculpas por ponerle un código tan malo, me da vergüenza.
   


No pasa nada, no te preocupes hombre xD

Etiquetas: