一尘不染

如何在Unity中的场景之间传递数据

c#

如何将得分值从一个场景传递到另一个场景?

我尝试了以下方法:

场景一:

void Start () {
    score = 0;
    updateScoreView ();
    StartCoroutine (DelayLoadlevel(20));
}

public void updateScoreView(){
    score_text.text = "The Score: "+ score;
}

public void AddNewScore(int NewscoreValue){
    score = score + NewscoreValue;
    updateScoreView ();
}

IEnumerator DelayLoadlevel(float seconds){        
    yield return new WaitForSeconds(10);
    secondsLeft = seconds;
    loadingStart = true;
    do {        
        yield return new WaitForSeconds(1);
    } while(--secondsLeft >0);

    // here I should store my last score before move to level two
    PlayerPrefs.SetInt ("player_score", score);
    Application.LoadLevel (2);
}

场景二:

public Text score_text;
private int old_score;

// Use this for initialization
void Start () {    
    old_score = PlayerPrefs.GetInt ("player_score");
    score_text.text = "new score" + old_score.ToString ();      
}

但屏幕上没有任何显示,也没有错误。

这是传递数据的正确方法吗?

我正在使用Unity 5免费版,为Gear VR开发游戏(这意味着该游戏将在android设备上运行)。

有什么建议吗?


阅读 1367

收藏
2020-05-19

共1个答案

一尘不染

除了playerPrefs之外,另一种肮脏的方法是在关卡加载期间通过调用对象DontDestroyOnLoad来保留对象。

DontDestroyOnLoad (transform.gameObject);

附加到游戏对象上的任何脚本都将保留,脚本中的变量也将保留。DontDestroyOnLoad函数通常用于保留整个GameObject,包括附加到它的组件以及它在层次结构中具有的任何子对象。

您可以创建一个空的GameObject,然后仅将包含要保留的变量的脚本放在其上。

2020-05-19