こんにちはsuzukiです。本日はUnityのインスペクターから値を編集するフィールドシリアライゼーションについて説明いたします。
上記のメリットとして、unityでrunしている最中に値の変更を行うことができたり、必要な設定をコード上以外からも編集できるため便利です。
利用する方法として、[SerializeField]を利用するか、publicの装飾子を利用するかとなります。
それぞれ利用パターンが異なるため整理します。
これからを説明するにはシリアラライズが何かを説明すると、公式の説明では下記の様に説明されており
“シリアライゼーションは、データ構造やオブジェクトの状態を Unity が保存して後で再構成できる形式に変換する自動プロセスです。”
重要なことは上記を行うことにより、Unityのインスペクタからの値の更新を、runしているプログラムに適用できる様になります。
シリアライズ利用するため準拠するルールがあります。
[SerializeField] は、その値がシリアライズ可能であることを表す属性です。
インスペクタから値の更新が可能になります
暗黙的にprivate装飾子がついている状態になるため、他のスクリプトからの値の参照ができません。
その値がシリアライズ可能であることを表すのはSerializeFieldと同様です
インスペクタから値の更新が可能になります
他のスクリプトから値に参照ができ、上書き等も可能です。
こちらはおまけ的な要素ですが、下記の二つの要素を合わせることで
[System.NonSerialized]:その値がシリアライズ不可を表す属性
public:他のスクリプトから値の参照ができる
インスペクタに表示されず、他のスクリプトからアクセスを可能とします。
まとめると下記の様な表になります。不要な参照はない方がいいので、それぞれの要不要を判断しながら適した内容を使っていければと思います。
装飾子 | インスペクタからの参照 | 他のスクリプトからの参照 |
---|---|---|
無・private | 不要 | 不要 |
[SerializeField] | 必要 | 不要 |
public | 必要 | 必要 |
[System.NonSerialized] public | 不要 | 必要 |