memomem

備忘録・メモ置き場

Unity シーン間のデータ受け渡し

qiita.com

上記記事からの引用

[CreateAssetMenu(fileName = "ScoreScriptableObject", menuName = "ScoreScriptableObject", order = 0)]
public class ScoreScriptableObject : UnityEngine.ScriptableObject, ISerializationCallbackReceiver
{
    [SerializeField] private int initScore = default;
    [NonSerialized] public int Score;

    public void OnAfterDeserialize()
    {
        // Editor上では再生中に変更したScriptableObject内の値が実行終了時に消えない。
        // そのため、初期値と実行時に使う変数は分けておき、初期化する必要がある。
        Score = initScore;
    }

    public void OnBeforeSerialize() { /* do nothing */ }
}

// "GameScene"側
public class ScoreChanger
{
    [SerializeField] private ScoreScriptableObject scoreScriptableObject = default;

    public void ScorePlusOne()
    {
        scoreScriptableObject.Score++;
    }
}

// "ResultScene"側
public class ScoreGetter
{
    [SerializeField] private ScoreScriptableObject scoreScriptableObject = default;

    public void GetScore()
    {       
        return scoreScriptableObject.Score;
    }
}

//スコアを保持するScriptableObjectを一つつくり、それをシーン内のコンポーネントにインスペクターから設定しています。