RotateTowards不旋转transform.forward

时间:2016-10-08 01:28:10

标签: unity3d

我有两个物体,捕食者和猎物。我正在尝试编写代码,以便当捕食者看到猎物时,它会向其方向旋转并向前移动(朝同一方向)。

Vector3.RotateTowards (transform.forward, preyPos, Mathf.Infinity, Mathf.Infinity);
transform.Translate (transform.forward * predatorSpeed);

我的理解是上面的代码应该旋转transform.forward,但它在该行之前和之后都是相同的向量。为什么会这样?我尝试了很多东西,但我无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

因为Unity中的Vector3是struct(值类型),因此总是按值传递。

Vector3 v = Vector3.zero;
ChangeValue(v); // Change value of v.x, v.y, v.z
Debug.Log(v); // still (0, 0, 0);

那就是说,Vector3.RotateTowards()必须返回一个Vector3。基本上,你需要:

transform.forward = Vector3.RotateTowards (transform.forward, preyPos, Mathf.Infinity, Mathf.Infinity);

但我不确定它会起作用,因为transform.forward是不可变的。 https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html

如果您想要旋转以面向目标,请考虑其中之一:

Transform.LookAt();
Quaternion.RotateTowards();
Quaternion也是struct,所以请仔细阅读文档。