我想知道我是否正确地做到了。
我有一个敌人在我的关卡附近移动,在不同的位置执行不同的操作。例如,移至某个点,然后转向玩家。拍摄几次,然后移至下一个点。我通过脚本执行的所有动作-transform.translate
,transform.rotate
等,并以编程方式触发电枢动画。
我进行了设置,以便当敌人到达某个点时,我会轻拂一个布尔值,然后在if
中有一堆Update
来检查当前布尔值是真的,并相应地应用根运动。观察:
void Update () {
if (!atNode) {
transform.LookAt (selectedNode.transform);
transform.Translate (Vector3.forward * Time.deltaTime * speed);
}
if (Vector3.Distance (transform.position, selectedNode.position) < 5) {
atNode = true;
}
}
这似乎是一种非常愚蠢的方法。我更喜欢只拥有一个我可以随意触发的moveToPoint( vec3 )
函数,并且让敌人移至Update()
之外的那个点,但是我认为该函数的唯一逻辑本质上是我已经在做的包装。
在这种环境下,根部运动通常如何处理?
答案 0 :(得分:1)
您想要“平稳”运动的事实,我想您想要它,您不希望敌人随机传送,这意味着协程或至少一个处理它的线程(就我而言)知道)。
但是要避免这一点,您可以使用“ MoveTowards()” :https://docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html
完成所需的“ moveToPoint(vec3)”。
答案 1 :(得分:0)
是的,如The Fish所说,使用固定更新。和Lotan建议的MoveTowards
...但是我想指出另外两种方法...
theres
transform.LookAt(target);
(您使用的是)
这将获取gameObject的变换并旋转它以查看目标(这也是一个变换,大概是您的玩家obj)
但是我想你想要
https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html
它需要一个向量三,但是您只能在一个轴上旋转它……您将像上面的旋转函数一样使用它,具有增量时间和速度,但是随着时间的流逝,您应该获得更平滑的旋转,而无需任何跳跃或捕捉。