public,private,serializefieldの使い方
2015年06月16日 (火) 02時17分38秒
Unityでのアクセス修飾子とSerializeFieldなどのAttributeの使い分け所感
public,privateなどのアクセス修飾子とSerializeFieldとSystem.NonSerializedなどのAttributeの使い方についての解説
アクセス修飾子について
public: 外からアクセス可能。Unityだとインスペクタで編集可能
private: 外からアクセス不可能。Unityだとインスペクタで編集不可能
速度の調節用に
public float speed
と使うと思う
実行中にインスペクタで調節可能なのでゲームをプレイしながらレベル調節が出来る
しかしこれでは外部スクリプトからアクセス出来てしまう
具体的には
speedがPlayerクラスのフィールドにある時、EnemyクラスがPlayerのspeedを調整する可能性がある
publicは公開相手を選択できない
しかしprivateにするとインスペクタから編集できない
そこでAttributeを使用する
SerializeField: インスペクタで見えるようにする
System.NonSerialized: インスペクタで見えないようにする
上記の「privateだがインスペクタからは編集したい」を実現するなら
[SerializeField]private float speed
と書く
逆に「publicだがインスペクタから編集したくない」なら
[System.NonSerialized]public float speed
と書く
自作クラスをインスペクタ上で編集したい場合は[Serializable]を使い、
[Serializable] public class Hoge{}
と書く
この使い方に賛否はあるが編者の所感として記す