1. ホーム
  2. c#

Unityでシーン間のデータ(と参照)を受け渡す方法

2023-10-25 14:31:47

質問内容

あるシーンから別のシーンにスコア値を渡すにはどうしたらよいでしょうか。

以下を試してみました。

シーン1

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);
}

シーン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 free editionを使用しており、Gear VR用のゲームを開発しています(アンドロイド端末で動作することを意味します)。

何か提案はありますか?

どのように解決するのですか?

playerPrefs の他に、DontDestroyOnLoad を呼び出すことによって、レベルロード中にオブジェクトを保持することも、汚い方法です。

DontDestroyOnLoad (transform.gameObject);

ゲームオブジェクトにアタッチされているスクリプトはすべて生き残り、スクリプト内の変数も生き残ります。 DontDestroyOnLoad関数は、一般的にGameObject全体、それに接続されているコンポーネント、そして階層にある子オブジェクトを含めて保存するために使用されます。

空のGameObjectを作成し、保存したい変数を含むスクリプトのみをその上に配置することができます。