UnityException:将子项转换为越界

时间:2017-06-16 15:55:48

标签: c# unity3d

我有6个面板当前效果正在显示。如果效果量为0,我希望它们全部消失。 effectOff()取消所有面板和效果图像。六个面板分别有六个儿童效果图像。 (蓝色,绿色,红色等)。代码应该使所有这些代码都被停用。

public GameObject effectbar;

public void effectOff()
{
    for (int i = 0; i < 6; i++)
    {
        for (int a = i; i < 6; i++)
        {
            effectbar.gameObject.transform.GetChild(i).GetChild(a).gameObject.SetActive(false);
        }
        effectbar.gameObject.transform.GetChild(i).gameObject.SetActive(false);
    }
    effectbar.SetActive(false);
}

effectbar.gameObject.transform.GetChild(i).gameObject.SetActive(false);行提供Transform child out of bounds例外。我该如何解决这个问题?我读到它会抛出一个错误,因为系统不知道子对象是否确实存在。谢谢你的转发。

2 个答案:

答案 0 :(得分:3)

假设effectBar是所有面板的父级,您只能写这一行:

effectbar.SetActive(false);

由于effectbar是父级,因此它也会自动停用子级。

答案 1 :(得分:0)

你的内循环正在递增i,因此当内循环结束时i6,之后外循环中的调用会触发,但是你的i现在已经出界了。

你可能想要一个不同的变量递增你的内循环,或者其他一些根据你需要的东西起作用。