解决'转变孩子越界'的例外情况

时间:2018-04-11 18:32:09

标签: c# unity3d exception

当父GameObject被触发时,我会将孩子SetActive的{​​{1}}设为真。

enter image description here

与此图片一样,GameObject是父BallIndigo1GameoOjectx中的GameObject

我写了这样的代码:

SetActive(false)

但结果说:

enter image description here

我不知道为什么会这样,以及如何解决它。

1 个答案:

答案 0 :(得分:0)

你得到这个是因为传递给OnTriggerEnter2D函数col.transform的GameObject没有孩子。您可以在致电col.transform.childCount > 0之前检查是否col.transform.GetChild(0)来解决此问题。

void OnTriggerEnter2D(Collider2D col)
{
    if (col.gameObject.activeSelf == true)
    {
        if (col.transform.childCount > 0 && col.transform.GetChild(0) != null)
        {
            col.transform.GetChild(0).gameObject.SetActive(true);
        }
        else
        {
            Debug.Log("No child");
        }
    }
}

如果你100%确定这个Object有一个孩子,那么还有一个正在检测到没有孩子的GameObject。在调用col.transform.GetChild(0)之前,您必须通过标记图层过滤掉此GameObject。创建一个名为" Ball"的标签。将要检测的对象设置为此标记。确保这个" Ball"对象有一个孩子。下面的代码应检查该标记,并应该克服该错误。

void OnTriggerEnter2D(Collider2D col)
{
    if (col.CompareTag("Ball"))
    {
        if (col.gameObject.activeSelf == true)
        {
            if (col.transform.GetChild(0) != null)
            {
                col.transform.GetChild(0).gameObject.SetActive(true);
            }
            else
            {
                Debug.Log("No child");
            }
        }
    }
}