Unity中解决DontDestroyOnLoad的坑

一:前言

我们经常要用到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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/LLLLL__/article/details/109247621
今日推荐