销毁
DontDestroyOnLoad
官方API文档
public static void DontDestroyOnLoad(Object target);
使加载新场景时不会自动销毁对象目标,调用DontDestroyOnLoad可以使对象存在于所有场景中。
注意点一:重复实例化
Unity中DontDestroyOnLoad在切换场景时的坑点 Unity3D研究院之DontDestroyOnLoad的坑
但是如果在Start中直接调用,切换场景再切回来就会导致产生多个当前的对象。
void Start ()
{
DontDestroyOnLoad(this);
}
参考链接的两篇文章里面提供了两种方法,一是static初始化的,还有一种是Awake的时候判断对象是不是为null。 官方文档是第二种:
private static bool created = false;
void Awake()
{
if (!created)
{
DontDestroyOnLoad(this.gameObject);
created = true;
}
}
注意点二:还是被销毁了
调用DontDestroyOnLoad方法后,转场物体还是会销毁 我遇到的问题是改变父对象,父亲对象被销毁后,子对象还是被销毁了。
public GameObject IMETip;
private void Start()
{
DontDestroyOnLoad(IMETip);
}
脚本是挂在IME上面的,但是IMETip在使用的过程中会动态切换父对象,父对象被销毁的时候,这个IMETip就算执行DontDestroyOnLoad还是会被销毁。 但是我发现我这个和转场的不一样。
|