一:前言
我们经常要用到DontDestroyOnLoad来使一个GameObject在切换场景的时候不被销毁
例如现在有两个场景Scene1和Scene2,在Scene1的GameManager脚本的Start方法中调用了DontDestroyOnLoad(gameObject),接着切换到Scene2,会发现GameManager对象没有被销毁,但当从Scene2切换到Scene1时,会多出一个GameManager对象,每次进入到Scenen1时都会多一个GameManager对象
这是因为每次进入到Scene1时,都会执行Start方法中的DontDestroyOnLoad方法,而之前的GameManager对象没有被释放,所以会又多出一个GameManager对象
二:解决方法一
创建一个初始化的场景,在初始化场景里面的某个游戏对象的全局脚本中,把所有游戏对象全部设置成DontDestroyOnLoad,也就是切换场景时不销毁,接着进入到第一个游戏场景,也就是说逻辑永远不会再返回初始化场景,也就不会存在来回切场景DontDestroyOnLoad没有删除的问题
三:解决方法二
判断一下引用是否为空,如果为空再设置为DontDestroyOnLoad,如果不为空则删除此游戏物体
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; set; }//单例
private void Awake()
{
if (Instance != null)
{
Destroy(gameObject);
}
else
{
Instance = this;
DontDestroyOnLoad(this);
}
}
}