2024-09-25 01:24:26
在unity3d中有2个forward,一个是vector3.forward和transform.forward,这两个forward其实完全不一样。他们之间的区别主要体现在在不同坐标系时的反映上。
Vector3.forward这个很好理解的,Vector3.forward就是 Vector3(0, 0, 1),也就是向世界坐标的z轴。
而Transform.forward则是当前物体的正方向,可以理解为是在Scene视图中这个物体蓝色轴的方向。如果向Transform.forward移动的话,这个物体无论如何旋转,都会朝向他的前方。
2024-09-25 01:43:06
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是会一直变化的。