Edited at

Unity 異なるシーンで変数を共有する簡単な方法

Unity初心者のメモ

私がOculus Goで動くコンテンツを作成していて、「ゲームシーンで保持しているスコアをリザルトシーンに出したい!」と思ったときに実践した方法です。

なおC#で記述しております。


やり方

共有する変数を static publicで宣言します。簡単。

例えばゲームシーンでスコアを計算し、ゲームが終わったらリザルトシーンに遷移してスコアを表示するようにします。


Game.cs

using System.Collections;

using System.Collections.Generic;
using UnityEngine;

public class Game : MonoBehaviour {
public static float score = 0; // スコア

void Start () {
}

void Update () {
  // コントローラーのトリガーを押したらスコアが加算される
if(OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger)){
score += 100;
}
}

public static float getScore(){
return score;
}
}


コントローラーのトリガーが押されたら100スコアが加算されるとします。

public static float scoreで共有したい変数を宣言し,

値を取得する用のメソッドをpublic static float getScore()のように記述します。


Result.cs

using System.Collections;

using System.Collections.Generic;
using UnityEngine;

public class Result : MonoBehaviour {

void Start () {
// ログ出力
Debug.Log("Score: "+ Game.getScore());
}

void Update () { 
}
}


参照したい別のシーンのクラスでは、Game.getScore()のようにクラス.メソッドの形でアクセスすれば、100ずつ加算された結果を参照することが出来ます。


注意

複雑な構造の場合や、色々な箇所から参照される場合には注意が必要です。

「クラス変数」にしたため、インスタンスを生成せずとも参照できてしまうので、他のすべての参照している箇所に影響が出ます。

単方向への参照など、シンプルな場合に使うのが良いです。