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{}

と書く

この使い方に賛否はあるが編者の所感として記す