Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: lightbug en Mayo 22, 2012, 09:20:39 PM

Título: Asignar la rotacion en x, y o z
Publicado por: lightbug en Mayo 22, 2012, 09:20:39 PM
Hola gente, tengo otro problemilla    me quiero hacer un FirstPerson COntroller casero casero (mentira me robe el MouseLook :whistle: )

Tengo una Camara y un Body (cuerpo,es un Capsule), basicamente quiero que el body solo rote en y, pero no en x y z (segun mis coordenadas), entonces en el script puse lo siguiente:



Body.transform.rotation.y = Camara.transform.rotation.y;






Me dice : no se puede modificar el valor de transform.rotation porque no es una variable


pero si hago lo siguiente si funciona (pero para todas las dimensiones):





Body.transform.rotation = Camara.transform.rotation;





Porque pasa esto?


Saludos
Título: Asignar la rotacion en x, y o z
Publicado por: Quel en Mayo 22, 2012, 09:37:46 PM
Pasa porque por casualidades de la vida, no puedes asignar un valor a la [...].transform.rotation pero no a uno de sus ejes individualmente. ¿ Que puedes hacer entonces ? ... Pues asignar la rotación a los tres ejes.

Body.transform.rotation = new Vector3(Body.transform.rotation.x,
                                      Camara.transform.rotation.y,
                                      Body.transform.rotation.z);


Ya esta. Las rotaciones en X y Z se mantienen iguales, pero la rotación Y la toma de la camera.

Como apunte extra, si te interesa optimizar el rendimiento, es mejor usar una variable predefinida para eso. Es mas "económico".

Primero defines una variable privada de tipo Vector3. Por ejemplo yo la llamo "auxVector3".
Asignas los valores a esa variable.
Y finalmente asignas la rotación usando dicha variable.

auxVector3.x = Body.transform.rotation.x;
auxVector3.y = Camara.transform.rotation.y;
auxVector3.z = Body.transform.rotation.z;
Body.transform.rotation = auxVector3;

Con eso te ahorras el de tener que "crear" una variable cada vez. Solo tienes que modificar una variable ya existente.

PD: El código esta escrito en C#. Supongo que en JavaScript debe de ser muy parecido. Pero sea como sea, el concepto y solución de tu problema es el mismo.
Título: Asignar la rotacion en x, y o z
Publicado por: lightbug en Mayo 22, 2012, 09:45:17 PM
Respuesta mas clara que esta no existe!!  



Muchisimas Gracias!!!
Título: Asignar la rotacion en x, y o z
Publicado por: lightbug en Mayo 22, 2012, 10:01:28 PM
lo hice asi, creo que mas directo, me habia olvidado que tengo que trabajar con vectores  :woohoo:


Body.transform.rotation = Quaternion.Euler(0, Main_Camera.transform.rotation.eulerAngles.y , 0);
Título: Asignar la rotacion en x, y o z
Publicado por: Moisés Moreno en Marzo 16, 2016, 09:17:00 PM
Buenas, estaba volviéndome loco con este tema, pues no comprendía porque no dejaba realizar el giro solo en el eje Y, y lo mas importante no sabía como solucionarlo.  Por lo que gracias Quel y lightbug por las soluciones. Por fin salgo del atasco que tenía al respecto.Saludos,