我想从我的数组中移动每个对象,我的意思是首先移动到[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函数之间。
答案 0 :(得分:1)
你得到了奇怪的动作,因为在每个Update()
(你exit()
的每次调用)中,你都会遍历path
中的所有节点,而只移动一个节点迈向他们的步骤这是因为Vector3.MoveTowards仅计算从当前到目标的移动的下一步。你步骤的大小是&#34; 1&#34; (Vector3.MoveTowards()
)的第三个参数
所以基本上,在每个Update()
中都会发生这种情况:
path
path
path
所以,我这样做是这样的:
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;
}
}
}
这是做什么的:
path
获取第一个节点(CurrentNodeIndex
开头为1)Vector3.Distance
)不大约为0(使用Mathf.Approximately
),则向节点靠近一步(使用Vector3.MoveTowards
)CurrentNodeIndex
会增加。path
中选择下一个节点并重复此过程 - 开始向它移动path
的最后一个节点时,返回。您还可以使用一些全局私有bool标志来指示并优化请原谅任何编译错误;我没有使用Unityscript,而是使用C#,现在没办法测试它。
顺便说一句,你有没有理由开始从path
索引1而不是0?如果您打算从path
的实际第一个节点开始,请将CurrentNodeIndex
初始化为0而不是1。