どうもなおゆです。
今回はスクリプト間で変数を共有する方法について書いていきます。
変数のアクセス修飾子をpublicにする
スクリプト間で変数を共有する方法は色々ありますが、よくあるのが変数のアクセス修飾子をpublicにする方法です。publicな変数はもっとも手軽な方法ですが、それ故にどうしてもバグの原因になりやすいです。
プロパティを使用する
今回紹介するのはプロパティという仕組みです。
プロパティを使用する事でprivateな変数を安全に共有することができます。
プロパティを使用する場合、変数へのアクセスはプロパティを経由するため想定外のアクセスを防止できます。
プロパティの書き方(ScriptA側)
プロパティを作成してあげることでprivateな変数にアクセスすることができます。
public class ScriptA : MonoBehaviour
{
private int score;
public int Score // プロパティ
{
get { return score; } // 通称ゲッター。呼び出した側がscoreを参照できる
set { score = value; } // 通称セッター。value はセットする側の数字などを反映する
}
}
プロパティの呼び出し方(ScriptB側)
public class ScriptB : MonoBehaviour
{
private ScriptA scriptA;
void Start()
{
this.scriptA = FindObjectOfType<ScriptA>(); // インスタンス化
int i = scriptA.Score; // ゲッター。ScriptAの変数を取得する
scriptA.Score = 10; // セッター。ScriptAの変数を書き換える
}
}
プロパティの簡素な書き方
プロパティの仕組みは先ほど説明したとおりですが、実はもっと簡単に書くことが可能です。プロパティを保有する側(ScriptA側)でこう書きます。
private int Score { get; set;}
たったこれだけで十分です。
プロパティを呼び出す側(ScriptB側)では先ほどと同じコードで呼び出すことが出来ます。
コメント