Jump to content
Sign in to follow this  
R3N3

Rotacion Tag

Recommended Posts

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; 
}

 

Share this post


Link to post
Share on other sites

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.

Cita

bool rotar = false;

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:

Cita

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

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Quote

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

 

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

 

 

 

Edited by lightbug

Share this post


Link to post
Share on other sites

Perdón Perdón, Perdón a  @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.

Share this post


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

Perdón Perdón, Perdón a  @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 :6_smile:

Share this post


Link to post
Share on other sites
hace 11 horas, R3N3 said:

Perdón Perdón, Perdón a  @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

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...