MoveTowards 无法正常工作

MoveTowards not working properly

我想从数组中移动到每个对象,我的意思是先移动到 [0],然后移动到 [1],依此类推。我在动画方面遇到问题。

function exit( path : Array){
    var node : Node;
    var go : GameObject;

    for(var i=1 ; i < path.length ; i++){
        node = path[i] as Node;
        go = node.getContent() as GameObject;
        nodeS.getContent().transform.position =  Vector3.MoveTowards(nodeS.getContent().transform.position, go.transform.position  ,1);
    }
}

我在 Update() 中调用了退出函数。结果,我的动作很奇怪,我知道问题出在 for 循环和 Update 函数之间。

你得到了奇怪的动作,因为在每个 Update()(你的 exit() 的每次调用)中,你遍历了 path 和 [=43= 中的所有节点]向他们迈出一步。因为Vector3.MoveTowards只计算从currenttarget的下一步移动。你的步长是“1”(Vector3.MoveTowards()的第三个参数)

所以基本上,在每个 Update() 中,都会发生这种情况:

  • path
  • 的第一个节点靠近 1 个单元
  • path的第二个节点移动1个单元
  • path的第三个节点移动1个单元
  • 等等

所以,我会这样做:

function exit(path : Array) {

    var node : Node;
    var go : GameObject;

    node = path[CurrentNodeIndex] as Node;
    go : GameObject = node.getContent() as GameObject;


    if (!Mathf.Approximately(
            Vector3.Distance(nodeS.getContent().transform.position, go.transform.position),
            0
    )) {

        nodeS.getContent().transform.position = Vector3.MoveTowards(nodeS.getContent().transform.position, go.transform.position, 1);

    } else {
        CurrentNodeIndex++;
        Debug.Log("Starting to move towards next node: " + CurrentNodeIndex);

        if (CurrentNodeIndex >= path.length) {
            Debug.Log("The final node was reached!");
            return;
        }
    }
}

这是做什么的:

  1. path中获取第一个节点(CurrentNodeIndex开头为1)
  2. 如果当前节点与nodeS之间的距离(使用Vector3.Distance)不近似为0(使用Mathf.Approximately),向节点靠近一步(使用Vector3.MoveTowards
  3. 每次更新都会调用这个,直到两个节点之间的距离大约为0。然后CurrentNodeIndex增加。
  4. 在下一次更新中,select 来自 path 的下一个节点并重复该过程 - 开始向它移动
  5. 当到达 path 的最后一个节点时,只是 return。您还可以有一些全局私有 bool 标志来指示这一点并优化

编译错误请见谅;我不使用Unityscript,而是使用C#,现在没有办法测试它。

顺便说一句,你从 path 开始用索引 1 而不是 0 做笔记有什么原因吗?如果您打算从 path 的实际第一个节点开始,请将 CurrentNodeIndex 初始化为 0 而不是 1。