描述
在 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;
}