项目中在检查物体生命周期和进行资源对象和实例化对象回收的时候, 遇到了两个问题:
- 组件在OnDestroy方法中, 调用了Destroy(gameObject)方法, 会不会出问题?
- 组件在OnDestroy方法中, 能否取得到子物体的数据, 还是直接报空?
这两个问题, 可以转换为以下几个可以通过简单代码验证的问题
- 具有层级关系和同级关系的组件OnDestroy调用顺序是怎样?
- Unity对Destroy和DestroyImmediate的操作有没有考虑到重复调用的问题?
- Destroy一个物体, 会不会马上丢失了其父物体或子物体的引用?
为了验证这几个问题, 我在场景里面创建了几个有层级关系和同级关系的物体, 每个物体都添加了测试脚本TestDestroy
关系如下图
OnDestroy测试代码如下
public class TestDestroy : MonoBehaviour
{
public int Depth;
public bool DestroyChild;
private void OnDestroy()
{
Destroy(gameObject);
Log.Error("{0} Destroy again depth: {1}", gameObject.name, Depth);
if (transform.childCount != 0)//叶子节点无法访问子节点