Visto en: https://gamedevbeginner.com/how-to-rotate-in-unity-complete-beginners-guide/
Vector3 newPosition = new Vector3(0, 10, 0); transform.position = newPosition;
Así es como ponemos una nueva posición a un objeto. Para poner una nueva rotación (pitch, yaw and roll):
Vector3 newRotation = new Vector3(0, 10, 0); transform.eulerAngles = newRotation;
No podemos usar directamente la propiedad transform.rotation con un vector, ya que internamente es un valor tipo Quaternion. Tendríamos que hacerlo así:
// Copiando directamente desde otro objeto Quaternion objectRotation = otherObject.transform.rotation; transform.rotation = objectRotation; // o usando el metodo Quaternion.Euler transform.rotation = Quaternion.Euler(new Vector3(0,10,0));
Estos métodos nos sirven para establecer una vez el valor de la rotación, pero si queremos hacer incrementos debemos usar el metodo Rotate:
transform.Rotate(new Vector3(0,10,0));
Si lo metemos en un bucle rotamos 10 grados en y cada vez. También lo podemos usar en la funcion Update:
float gradosPorSegundo = 15; private void Update() { transform.Rotate(new Vector3(0, gradosPorSegundo, 0) * Time.deltaTime); }
Local rotation vs world rotation
Vector3 worldRotation = transform.eulerAngles; Vector3 localRotation = transform.localEulerAngles;// World Rotation
transform.eulerAngles = new Vector3(0,90,0);
// Local Rotation transform.localEulerAngles = new Vector3(0,90,0);
Rotar alrededor de un punto
Si quiero rotar alrededor de un punto diferente al pivote del objeto, puedo usar el truco de hacerlo hijo de otro gameObject vacío.
También puedo usar un método:
// Rota alrededor de un punto, eje y, 90 grados transform.RotateAround(new Vector3(1,1,1), Vector3.up, 90);// Rota alrededor de la posición del pivote del objeto, eje Y, 90 grados
transform.RotateAround(objectToRotateAround.position, Vector3.up, 90);
Vector3.left -> X-Axis, Vector3.up -> Y-Axis y Vector3.forward -> Z-Axis. Vector3.up representa up global dirección, Transform.up representa up en relación al Transform de un gameObject.
Orbitar en el tiempo:
public Transform objectToOrbit;
void Update()
{
transform.RotateAround(objectToOrbit.position, Vector3.up, 10 * Time.deltaTime);
}
Hay que tener en cuenta que cuando rotamos alrededor de un objeto, rotamos siempre mirando al objeto. Esto puede ser útil si somos una cámara que orbita sobre un objeto, pero si somos un planeta, queremos girar también sobre nuestro eje y no mirar siempre al sol.