public,private,serializefieldの使い方 の変更点

このエントリーをはてなブックマークに追加

Unityでのアクセス修飾子とSerializeFieldなどのAttributeの使い分け所感

public,privateなどのアクセス修飾子とSerializeFieldとSystem.NonSerializedなどのAttributeの使い方についての解説

アクセス修飾子について
public: 外からアクセス可能。Unityだとインスペクタで編集可能
private: 外からアクセス不可能。Unityだとインスペクタで編集不可能

速度の調節用に
#code(csharp){{
public float speed
}}
と使うと思う
実行中にインスペクタで調節可能なのでゲームをプレイしながらレベル調節が出来る
しかしこれでは外部スクリプトからアクセス出来てしまう
具体的には
speedがPlayerクラスのフィールドにある時、EnemyクラスがPlayerのspeedを調整する可能性がある
publicは公開相手を選択できない
しかしprivateにするとインスペクタから編集できない

そこでAttributeを使用する
SerializeField: インスペクタで見えるようにする
System.NonSerialized: インスペクタで見えないようにする

上記の「privateだがインスペクタからは編集したい」を実現するなら
#code(csharp){{
[SerializeField]private float speed
}}
と書く

逆に「publicだがインスペクタから編集したくない」なら
#code(csharp){{
[System.NonSerialized]public float speed
}}
と書く

自作クラスをインスペクタ上で編集したい場合は[Serializable]を使い、
#code(csharp){{
[Serializable]
public class Hoge{}
}}
と書く


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