unity在scene间传递数据

435 阅读1分钟

实例:想在coursePage中传递个字符串参数到lessonPage中。 coursePage里面写个脚本,起作用的其实是DontDestroyOnLoad,有了这句,在切换Scene的时候就可以保留这个obj而不被销毁。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
​
public class LessonObjScript : MonoBehaviour
{
    public static LessonObjScript myLessonApi;
    public string lessonApiAddress;
    public static GameObject obj;
    // Use this for initialization  
    void Start()
    {
​
    }
​
    public static LessonObjScript getInstance()
    {
        if (myLessonApi == null)
        {
​
            obj = new GameObject("apiLesson");//创建一个带名字的对象  
            myLessonApi = obj.AddComponent(typeof(LessonObjScript)) as LessonObjScript;
            DontDestroyOnLoad(obj);
        }
        return myLessonApi;
    }
    // Update is called once per frame  
    void Update()
    {
​
    }
}

然后在coursePage里面这样用:

  var lScript = LessonObjScript.getInstance();
  lScript.lessonApiAddress = brief.LessonUrl; //coursePage中产生的某数据保存起来
  SceneManager.LoadScene("lessonPage");

新建这个实例之后就可以保存字符串数据到LessonObjScript实例类中了,之后可以载入并打开新的Scene:lessonPage lessonPage里面就可以通过实例类来获取到里面的数据。

。。。    
void Start()
    {
    var lScript = LessonObjScript.getInstance();
    Debug.Log("需要下载的lessonApi: "+lScript.lessonApiAddress);

明白了原理其实也比较简单,就是通过实例类来共享数据,在整个程序运行中,此LessonObjScript实例类有且仅有一份(单例)