「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