Unity 之 transform.rotate() 实现旋转

在这里插入图片描述

详细介绍

在Unity中,Transform.Rotate() 是一个用于在物体上进行旋转的函数。它可以用来在局部坐标系下对物体进行旋转,也可以在世界坐标系下进行旋转。下面是关于 Transform.Rotate() 的详细介绍:

函数签名:

public void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);

参数:

  • eulerAngles: 一个表示旋转欧拉角的 Vector3。这是旋转的角度,分别围绕物体的X、Y和Z轴。单位为度。
  • xAngle, yAngle, zAngle: 分别表示围绕X、Y和Z轴旋转的角度。单位为度。
  • relativeTo: 可选参数,指定旋转是基于局部坐标系(Space.Self)还是基于世界坐标系(Space.World)。默认为基于局部坐标系。

使用示例:

using UnityEngine;

public class RotateObject : MonoBehaviour
{
    public float rotationSpeed = 60.0f;

    // Update is called once per frame
    void Update()
    {
        // 在局部坐标系下绕Y轴旋转
        transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime);

        // 在世界坐标系下绕X轴旋转
        transform.Rotate(Vector3.right * rotationSpeed * Time.deltaTime, Space.World);
    }
}

说明:

  • 当你调用 Rotate() 函数时,它会根据传递的角度参数来执行旋转操作。旋转是增量性的,即每次调用都会将物体旋转一个特定的角度。
  • 你可以使用 Vector3 来表示旋转的欧拉角,也可以分别传递X、Y、Z轴的旋转角度。
  • relativeTo 参数用于指定旋转是基于局部坐标系还是世界坐标系。默认情况下,使用局部坐标系。
  • 这个函数通常在物体的更新循环中调用,例如 Update() 函数中,以便在每一帧更新物体的旋转。

请注意,使用 Rotate() 函数进行旋转时,也需要注意万向锁问题,特别是在局部坐标系下。如果你需要在复杂的旋转操作中避免万向锁问题,通常建议使用四元数(Quaternion)来执行更稳定的旋转。

默认情况下,以局部坐标

Transform.Rotate() 函数的默认行为是在局部坐标系下执行旋转。如果没有显式指定第二个参数 relativeTo,它将默认使用局部坐标系来执行旋转操作。这意味着旋转将基于物体自身的坐标轴进行,而不受其父物体的影响。

例如,在以下代码中:

transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime);

如果没有提供 relativeTo 参数,这个旋转操作将在物体的局部坐标系下绕Y轴进行,不受物体的父物体影响。

如果你想要在世界坐标系下进行旋转操作,你可以明确指定 relativeTo 参数为 Space.World,就像这样:

transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime, Space.World);

在总结中,Transform.Rotate() 函数默认使用局部坐标系进行旋转,但你可以通过设置 relativeTo 参数来改变旋转坐标系。