笔者在此举一个简单的例子
我们现在已经创建好两个场景, start, game, 现在要在这两个场景中进行数据交互
unity提供了一个方法将我们想要交互的数据以一个场景保存下来,DontDestroyOnLoad();, 该方法将对挂载的物体DontDestroyOnLoad场景中,该场景不会随着start和game的切换而切换,所以,在切换场景后,我们需要的数据可以在DontDestroyOnLoad场景的物体中获取
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Data : MonoBehaviour{ /// <summary> /// 单例模式 /// </summary> public static Data m_Data; private void Awake() { m_Data = this; DontDestroyOnLoad(this); } }
此时便可以在想要的场景中获取到需要的数据和资源,然后再切换场景的时候,将这些数据和资源进行整合,这里的单例模式也是方便获取数据的一种方法。
挂载Data这个脚本的物体要做成预制体,否则直接存在场景中,在每一次加载该场景时,就会生成一个该物体,会造成数据积压,还会有不必要的bu*生,所以,我们在开始游戏的时候,再创建一个物体,该物体搭载的脚本将判断场景中是否有搭载Data脚本的物体,如果没有,则加载,有,则不需要创建该物体。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Global : MonoBehaviour { public GameObject data; private void Awake() { if (GameObject.FindGameObjectWithTag("Data") == null) { Instantiate(data); }else { GameObject.FindGameObjectWithTag("Data").GetComponent<Data>().Init(); } } }
本期是对场景切换中的一些问题进行解决,如有错误或者其他更好的方法,欢迎评论!