如何使游戏对象切换场景后不释放?DontDestroyOnLoad

有时候我们想要保存一个全局的游戏脚本,比如封装的SDK需要用脚本来做中间件的支持,并且场景切换后仍要留存。

那么游戏对象切换场景如何不释放?答:使用DontDestroyOnLoad(GameObject gameObject)方法。

使用该方法会有一个问题,比如我们在A场景里DontDestroyOnLoad(gameObjectA),则我们切换到B场景时GameObjectA不会被释放掉,然后我们再切换回场景A,会发现出现了两个gameObjectA

解决方案1

创建一个初始化场景,在创建的某个游戏对象的全局脚本中,Start方法里DontDestroyOnLoad(this),

void Start(){

    DontDestroyOnLoad(this)

}

然后进入自己的第一个游戏场景,且不再返回初始化场景,也就不会出现来回切场景DontDestroyOnLoad没有删除的问题

解决方案2

利用静态构造函数只会执行一次的特性来执行DontDestroyOnLoad方法

using UnityEngine;

using System.Collections;

public class Global :MonoBehaviour

{

public static Global instance;

static Global()

{

GameObject go = new GameObject("Globa");

DontDestroyOnLoad(go);

instance = go.AddComponent<Global>();

}

public void DoSomeThings()

{

Debug.Log("DoSomeThings");

}

void Start ()

{

Debug.Log("Start");

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。