Menu
CoddyTech

局部空间与世界空间

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 26 课,共 85 课。

对象有自己的方向,也有世界坐标系的方向。transform.forward 是对象机头指向的方向(Unity 的 Scene 视图中的蓝色箭头),表示为长度为 1 的世界坐标向量;transform.right 和 transform.up 分别表示对象自身的右方和上方。转动对象时,这些方向也会随之转动。这个纸飞机在场景中绕 y 轴转了 90 度,所以它会沿着世界坐标系的 x 轴飞行,也就是它指向的方向:

public float speed = 4f;

void Update()
{
    transform.position += transform.forward * speed * Time.deltaTime;
}

transform.Translate(Vector3.forward * speed * Time.deltaTime) 的效果相同,因为 Translate 会在对象自身坐标系中读取向量:在该坐标系中,Vector3.forward 表示对象的前方。将 Space.World 作为第二个参数传入,它就会改用世界坐标系的轴,因此无论纸飞机指向哪个方向,transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World) 都会让它沿世界坐标系的 z 轴移动。

transform.Rotate 也会绕对象自身的轴转动。从上方看,绕 y 轴转动正角度会让直立的对象向右转,转动负角度则会让它向左转,而它的 transform.forward 也会随之转动。

challenge icon

挑战

简单

让坦克拥有坦克式操控:原地转向,朝着车头所指的方向行驶。

  1. 在 Update() 中,按住右箭头时运行 transform.Rotate(0, turn * Time.deltaTime, 0);,按住左箭头时则使用 -turn。
  2. 按住上箭头时运行 transform.Translate(Vector3.forward * speed * Time.deltaTime);。

按“开始”,转向并行驶:坦克会朝车头所指的方向前进。然后按“检查”。

亲手试试

using UnityEngine;

public class Tank : MonoBehaviour
{
    public float speed = 3f;
    public float turn = 90f;

    void Update()
    {
        // 按左右方向键:绕 y 轴转向。按上方向键:朝坦克面向的方向前进。
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器