(Unity)シーン間でスコアデータを引き継ぐ(イベント登録の活用)

(スクリプト)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ScoreManagerX : MonoBehaviour
{
    private int score = 0;
    public Text scoreLabel; 

    void Start()
    {
        scoreLabel.text = "得点:" + score.ToString("D10");
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            score += 300;
            scoreLabel.text = "得点:" + score.ToString("D10");

            if(score > 1000)
            {
                // ★イベントの登録(次のシーンで呼び出したいメソッドを指定する)
                SceneManager.sceneLoaded += KeepScore;

                SceneManager.LoadScene("KeepData2");
            }
        }
    }

    // ★このメソッドがシーン切り替え時に、次のシーンで実行される。
    void KeepScore(Scene next, LoadSceneMode mode)
    {
        // 次のシーンの中にあるオブジェクトを取得
        // そのオブジェクトに付加されているスクリプトを取得
        var sm = GameObject.Find("ScoreManager").GetComponent<ScoreManagerX>();

        // そのスクリプト内にあるスコアに、このシーンで獲得したスコアデータをセットする(=スコアデータを引き継ぐ)
        sm.score = score;

        // イベントの削除
        SceneManager.sceneLoaded -= KeepScore;
    }
}

(構成)

  • ステージ1

  • ステージ2


(実行結果)

  • スコアデータが次のシーンに引き継がれていたら成功です。