Unity中的物体移动

在Unity中,Rotate 和 Translate 是 Transform 组件的两个方法,它们用于改变游戏对象的空间位置和方向。

Rotate 方法
Rotate 方法用于围绕游戏对象的局部坐标系中的轴或围绕世界坐标系中的轴旋转游戏对象。这个方法有多个重载版本,允许你以不同的方式指定旋转。

局部旋转

transform.Rotate(Vector3.up, angle, Space.Self);

这个调用表示游戏对象围绕其局部y轴(向上轴)旋转angle度。Space.Self参数指定旋转是相对于游戏对象自身的局部坐标系。

世界旋转

transform.Rotate(Vector3.up, angle, Space.World);

与局部旋转不同,这个调用表示游戏对象围绕世界坐标系中的y轴旋转angle度。Space.World参数指定旋转是相对于全局坐标系。

立即旋转

transform.Rotate(angleX, angleY, angleZ);

这个调用立即将游戏对象绕X、Y和Z轴分别旋转angleX、angleY和angleZ度。这个方法不使用Space参数,因为它总是以局部坐标系为基础。

Translate 方法
Translate 方法用于按指定的向量移动游戏对象。与Rotate类似,Translate也有多个重载版本。

局部移动

transform.Translate(Vector3.up * distance, Space.Self);

这个调用表示游戏对象在局部y轴方向上移动distance单位距离。Space.Self参数指定移动是相对于游戏对象自身的局部坐标系。

世界移动

transform.Translate(Vector3.up * distance, Space.World);

这个调用表示游戏对象在世界坐标系的y轴方向上移动distance单位距离。Space.World参数指定移动是相对于全局坐标系。

立即移动

transform.Translate(deltaPosition);

这个调用立即将游戏对象按照deltaPosition向量移动。这个方法不使用Space参数,因为它总是以局部坐标系为基础。

示例代码

using UnityEngine;

public class MovementScript : MonoBehaviour
{
    void Start()
    {
        // 围绕局部z轴旋转45度
        transform.Rotate(0, 0, 45);

        // 在世界y轴方向上移动5单位距离
        transform.Translate(0, 5, 0, Space.World);
        
        // 在局部x轴方向上移动10单位距离
        transform.Translate(new Vector3(10, 0, 0));
    }
}

在这个示例中,我们首先围绕游戏对象的局部z轴旋转45度,然后将其沿世界y轴向上移动5个单位,最后沿游戏对象的局部x轴移动10个单位。

Rotate和Translate方法在Unity中非常常用,它们是控制游戏对象位置和方向的基本工具。

posted @ 2024-06-05 13:48  NiuFacai  阅读(190)  评论(0)    收藏  举报