局部空间与世界空间
本课属于 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 也会随之转动。
挑战
简单让坦克拥有坦克式操控:原地转向,朝着车头所指的方向行驶。
- 在
Update()中,按住右箭头时运行transform.Rotate(0, turn * Time.deltaTime, 0);,按住左箭头时则使用-turn。 - 按住上箭头时运行
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 在线编辑器