Unity3d vector3.forward和transform.forward的区别

请讲解下,Unity3d vector3.forward和transform.forward的区别
最新回答
心头的小情儿

2024-09-25 01:24:26

  1. 在unity3d中有2个forward,一个是vector3.forward和transform.forward,这两个forward其实完全不一样。他们之间的区别主要体现在在不同坐标系时的反映上。

  2. Vector3.forward这个很好理解的,Vector3.forward就是 Vector3(0, 0, 1),也就是向世界坐标的z轴。

  3. 而Transform.forward则是当前物体的正方向,可以理解为是在Scene视图中这个物体蓝色轴的方向。如果向Transform.forward移动的话,这个物体无论如何旋转,都会朝向他的前方。

半袖桃花

2024-09-25 01:43:06

Vector3.forward这个很好理解的,Vector3.forward就是 Vector3(0, 0, 1),也就是向世界坐标的z轴
而Transform.forward则是当前物体的正方向,您可以理解为是在Scene视图中这个物体蓝色轴的方向。如果您向Transform.forward移动的话,这个物体无论如何旋转,都会朝向他的前方。
晚街听风

2024-09-25 00:31:53

Transform.Forward和Vector3.Forward有什么区别

举个例子:

下面写的是控制车辆行驶的部分代码,车辆不能往正前方行驶。

this.transform.Translate(transform.forward);

这样的用法是否正确呢?

一切从汽车控制说起,我们都知道,改变物体的坐标,可以模拟物体移动

场景中有辆车的位置为(0,0,0),我们想让他向前移动,通过scene界面我们发现物体向前移动得改它的z轴,于是我们可以这么写代码

void Update () {

this.transform.position += new Vector3 (0, 0, 1);

}

这么写之后,确实就往前方跑了,但是有个问题,Update一帧执行5,60次,每帧都new 一个Vector3的话,对内存是一个消耗。

于是我们用一个系统自带的Vector3.forward(它代表Vector3(0,0,1))

void Update () {

this.transform.position += Vector3.forward;

}

所以记住,Vector3.forward是一个定值,它没有任何意义!它仅仅代表Vector3(0,0,1),仅此而已,前往别给它任何意义。

那么上面的代码其实是有问题的。当我们把小车的旋转值改变之后,发现this.transform.position += Vector3.forward已经不能让车往前方走了,他需要一个正确的方向向量。

于是transform.forward应运而生,他是一个用来自动对物体旋转值算出前进方向向量的变量。

void Update () {

this.transform.position += transform.forward;

}

我们把代码改成上面那样,就可以按照车辆向前的方向行驶了。

所以记住,transform.forward是一个变值,它代表物体的前方的向量!会根据物体的旋转量自动算出来,如果物体时刻在旋转,这个transform.forward是会一直变化的。