Unity中的运动循环

时间:2015-03-24 11:20:59

标签: c# unity3d

我有四个物体,每个物体都位于一个正方形的一个角落里。我希望顺时针移动这些对象,每个方法调用1个位置。

使用我的atm代码,他们只需在1个方法调用上完成整个循环,而不是只移动一个位置...

到目前为止我的代码:

void SwitchPositions() 
    {

            tempPosition1 = parent.transform.GetChild(0).GetComponent<Transform>().position;
            tempPosition2 = parent.transform.GetChild(1).GetComponent<Transform>().position;
            tempPosition3 = parent.transform.GetChild(2).GetComponent<Transform>().position;
            tempPosition4 = parent.transform.GetChild(3).GetComponent<Transform>().position;
            parent.transform.GetChild (0).GetComponent<Transform> ().position = tempPosition2;
            parent.transform.GetChild (1).GetComponent<Transform> ().position = tempPosition3;
            parent.transform.GetChild (2).GetComponent<Transform> ().position = tempPosition4;
            parent.transform.GetChild (3).GetComponent<Transform> ().position = tempPosition1;
            Debug.Log (tempPosition1);


    }

如果有人有任何想法如何解决这个或至少向我解释为什么它在1方法调用中完成整个循环......

谢谢!

1 个答案:

答案 0 :(得分:1)

我真的不确定你的计时器是如何工作的,或者你的代码有什么问题。但是我已经使用了协程,每隔两秒就会切换一次块并且它会连续发生。我认为这应该接近你需要的地方。

//Predefined positions where objects to place
public Transform[] Position;
//The objects that will will be swapped in coroutines
public Transform[] ObjectsToMove;
private int ObjectIndex = 0;
private bool startupdate = true;

void Update () {
    if(startupdate)
       StartCoroutine(SwitchBlocks());
}

IEnumerator SwitchBlocks() {
    startupdate = false;
    int tempIndex = ObjectIndex;
    for(int i = 0; i < ObjectsToMove.Length; i++) {
        tempIndex = ObjectIndex + i;
        if(tempIndex > ObjectsToMove.Length - 1)
            tempIndex -= ObjectsToMove.Length;
        ObjectsToMove[i].position = Position[tempIndex].position;
    }
    ObjectIndex++;
    if(ObjectIndex > ObjectsToMove.Length - 1) {
        ObjectIndex = 0;
    }
    yield return new WaitForSeconds(2.0f);
    startupdate = true;
    yield return null;
}

希望这有帮助。