シヴァのブログ

UnityやUE4や趣味とかいろいろ...

「Unity」プロパティについて

「Unity」のC#で、変数を参照するために、
変数をpublicにするのもいいが、今回はプロパティというのを知ったので使ってみた。


プロパティは、それ自身が変数であるかのように振る舞い、フィールドと呼ぶメンバ変数をカプセル化する。
このカプセル化によって、いつ、どのようにフィールドがアクセスされたか、ということに関してより多くの操作権限を得られる。
よく聞くのは、ゲッターとセッターってやつ。

public class SystemManager : MonoBehaviour {
	[SerializeField]
	private string floorTag;
	// プロパティ
	public string FloorTag{
		get{return this.floorTag;}//取得
		private set{this.floorTag = value;}//値入力
	}
}
// 方法[1]
public class Player : MonoBehaviour {
	//インスペクタービューで上で書いたのスクリプトを設定
	public SystemManager SMProperty;

	void Start () {
		Debug.Log(SMProperty.FloorTag);
	}
}

// もしくは...方法[2]
public class Player : MonoBehaviour {
	private GameObject systemManager;//システムマネージャー

	void Start () {
		systemManager = GameObject.Find ("systemManagerObj");//ヒエラルキー上のオブジェクト検索
		Debug.Log(systemManager.GetComponent<SystemManager>().FloorTag);
	}
}

方法①も②もやっていることは同じなのでどっちでもいいです。
(②は、systemManagerObjにSystemManager.csを設定している前提)
ちなみに、
値の参照の設定は自クラスのみにするために、セッターにはprivateを付けています。

また、[SerializeField]を使っているのは、
実行中に中が見れるので、ログ出力コードを大量に書かなくて便利のため残しています。
なので、いらない方は別に消しても問題ないです。
Unity なんでもインスペクタに表示していくやつ : KLabGames Tech Blog