web-dev-qa-db-ja.com

Unity-シーン間でデータを渡す

あるシーンから別のシーンにスコア値を渡すにはどうすればよいですか?

私は次を試しました:

シーン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無料版を使用して、Gear VR用のゲームを開発しています(ゲームはAndroidデバイス)で実行されます)。

なにか提案を?

14
Mina Fawzy

PlayerPrefsに加えて、別の汚い方法は、レベルのロード中にDontDestroyOnLoadを呼び出してオブジェクトを保持することです。

DontDestroyOnLoad (transform.gameObject);

ゲームオブジェクトにアタッチされたスクリプトはすべて存続し、スクリプト内の変数も存続します。 DontDestroyOnLoad関数は、通常、GameObject全体を保持するために使用されます。これには、それに接続されたコンポーネント、および階層内にある子オブジェクトが含まれます。

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

9
Isj