启动平移或旋转的功能

时间:2018-09-20 11:22:32

标签: unity3d

我想知道我是否正确地做到了。

我有一个敌人在我的关卡附近移动,在不同的位置执行不同的操作。例如,移至某个点,然后转向玩家。拍摄几次,然后移至下一个点。我通过脚本执行的所有动作-transform.translatetransform.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()之外的那个点,但是我认为该函数的唯一逻辑本质上是我已经在做的包装。

在这种环境下,根部运动通常如何处理?

2 个答案:

答案 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

它需要一个向量三,但是您只能在一个轴上旋转它……您将像上面的旋转函数一样使用它,具有增量时间和速度,但是随着时间的流逝,您应该获得更平滑的旋转,而无需任何跳跃或捕捉。