我有两个物体,捕食者和猎物。我正在尝试编写代码,以便当捕食者看到猎物时,它会向其方向旋转并向前移动(朝同一方向)。
Vector3.RotateTowards (transform.forward, preyPos, Mathf.Infinity, Mathf.Infinity);
transform.Translate (transform.forward * predatorSpeed);
我的理解是上面的代码应该旋转transform.forward,但它在该行之前和之后都是相同的向量。为什么会这样?我尝试了很多东西,但我无法解决这个问题。
答案 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
,所以请仔细阅读文档。