我不确定通过GameObjects的for循环是怎么回事

时间:2016-11-17 15:06:07

标签: c# unity3d

public void Update(){
    GameObject[] BoxArray = new GameObject[16]{BoxLid1, BoxLid2, BoxLid3, BoxLid4, BoxLid5, BoxLid6, BoxLid7, BoxLid8, BoxLid9, BoxLid10, BoxLid11, BoxLid12, BoxLid13, BoxLid14, BoxLid15, BoxLid16};

    for(int i = 0; i < BoxArray.Length; i++){
        Transform theBoxLid = BoxArray[i].transform;
        BlueBox.transform.Translate(theBoxLid.localPosition.x, theBoxLid.localPosition.y, 0);
        Debug.Log(theBoxLid.localPosition.x);

    }
}

我上面提到的Lids不是问题所在。我希望blueBox在数组中的BoxLids上移动,但它根本不移动。

我找到了一个解决方案,它是:

IEnumerator MoveBlueBox(){
    GameObject[] BoxArray = new GameObject[16]{BoxLid1, BoxLid2, BoxLid3, BoxLid4, BoxLid5, BoxLid6, BoxLid7, BoxLid8, BoxLid9, BoxLid10, BoxLid11, BoxLid12, BoxLid13, BoxLid14, BoxLid15, BoxLid16};

    for(int i = 0; i < BoxArray.Length; i++){
        Transform theBox = BoxArray[i].transform;
        BlueBox.transform.position = new Vector3(theBox.position.x, theBox.position.y, 0.0f);
        yield return new WaitForSeconds(0.1f);
    }
}

通过循环遍历数组并更改BlueBoxs变换位置,我每隔0.1秒将BlueBox放在BoxArray的每个方框的顶部。我发现的主要事情是我需要使用一个&#34;新的Vector3&#34;将框正确移动到BoxArrays x,y和z坐标中的每个框。

2 个答案:

答案 0 :(得分:3)

我仍然不确定“移动”是什么意思。你想先将你的蓝盒移动到BoxLid1,然后移动BoxLid2等吗?

另外,为了让Box看起来像移动你需要每次调用Update时更新你的位置。你可以采取各种方式,例如MoveTowards的{​​{1}}函数:

Vector3

这会将您的public class Move : MonoBehaviour { public GameObject boxLid1; public float speed = 5.0f; public void Update() { BlueBox.transform.position = Vector3.MoveTowards( BlueBox.transform.position, boxLid1.transform.position, Time.deltaTime * speed); } } 以一定的速度移动到BlueBox,直到达到它为止。另请注意,这是示例代码,我没有测试过。

答案 1 :(得分:0)

IEnumerator MoveBlueBox(){
    GameObject[] BoxArray = new GameObject[16]{BoxLid1, BoxLid2, BoxLid3, BoxLid4, BoxLid5, BoxLid6, BoxLid7, BoxLid8, BoxLid9, BoxLid10, BoxLid11, BoxLid12, BoxLid13, BoxLid14, BoxLid15, BoxLid16};

    for(int i = 0; i < BoxArray.Length; i++){
        Transform theBox = BoxArray[i].transform;
        BlueBox.transform.position = new Vector3(theBox.position.x, theBox.position.y, 0.0f);
        yield return new WaitForSeconds(0.1f);
    }
}

我认为这要归功于那些真正想要帮助的人。