【问题标题】:UnityException: Transform child out of boundsUnityException:将孩子变换出边界
【发布时间】:2017-06-17 00:02:30
【问题描述】:

我有六个面板显示当前效果。如果效果数量为 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 异常。我该如何解决?我读到它会引发错误,因为系统不知道子对象是否真的存在。谢谢转发。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

    effectbar.SetActive(false);
    

    因为effectbar 是父级,它也会自动停用子级。

    【讨论】:

    • 感谢您的回答。问题是拼写错误(int a = i; i &lt; 6; i++ 应该是 int a = i; a &lt; 6; a++),但我仍然会使用这一行,因为我真的不必将它们全部设置为 false。
    【解决方案2】:

    您的内部循环递增i,因此当内部循环完成时i6,之后您的外部循环中的调用触发,但您的i 现在超出范围。

    您可能需要一个不同的变量来增加您的内部循环,或者根据您的需要进行其他工作。

    【讨论】:

    • 是的,我不知何故没有注意到这一点。但只需关闭整个效果栏也可以。谢谢你的回答。
    • @Echi 没问题! Deadzone 的回答比我的要好 - 我会接受。
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2017-01-24
    • 2021-10-29
    • 2018-02-02
    • 2018-06-06
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多