Unity 不能在节点隐藏的时候更改子节点的父对象

描述

在 Unity 中使用物体池,在父节点进行隐藏的时候,把子物体回归到池里,即重设父对象,但此时 Unity 会报错:

Cannot set the parent of the GameObject ‘show_(Clone)’ while
activating or deactivating the parent GameObject ‘db’.

UnityEngine.Transform:SetParent(Transform, Boolean)

原因

正如提示的,Unity 限制了在显示或隐藏的时候,对子节点进行更改父对象操作。

解决

经过尝试,虽然限制了子节点的操作,但是不限制子节点的子节点,即在中间增加一个空物体来隔离,这里就可以放到池里。

当需要使用时,判断有没有中间物体存在,若无则先创建:

    public bool ShowLive(string livePath)
    {
        if (!m_Transform)
        {
            // 因为不能在禁用的时候,放回池里,所以只能通过中间空节点
            var go = new GameObject();
            m_Transform = go.transform;
            m_Transform.SetParent(transform, false);
        }
        
        return true;
    }

你可能感兴趣的:(3.3,Unity)