解决unity场景切换中数据交互的问题

笔者在此举一个简单的例子

我们现在已经创建好两个场景, 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();
        }
    }
}

本期是对场景切换中的一些问题进行解决,如有错误或者其他更好的方法,欢迎评论!

上一篇:java Collections工具类


下一篇:Collection和Collections的区别及二分查找法