この記事では、Unity での [SerializeField] と [HideInInspector] の使用方法を共有します。
今日はいくつかの機能の使用法を紹介します。
Unityの開発ではシリアル化技術をよく使いますが、シリアル化とは何でしょうか?
シリアライズ
シリアル化の最も簡単な説明は、特定のルールに従ってデータを整理および保存または送信し、その後、特定の時間または時点で同じルールに従ってデータを解析することです。
現在では一般的なXml、Json、Protobufなどのシリアル化メソッドが数多く存在しており、多くの学生がそれらに触れたことがあると思います。
これらの手段やルールには、占有スペースが小さくネットワーク送信に便利なもの、形式が明確で理解しやすいものなど、それぞれに利点があります。
C# では、クラス オブジェクトをシリアル化し、それを永続化し (つまり、保存し)、最終的に使用するときに元のオブジェクトを逆シリアル化することもできます。
ご存知のとおり、Unity の Prefab はリソース (アセット) であり、実際には内部でデータの編成と保存にシリアル化を使用します。
将来的には、今日の焦点ではない Prefab のシリアル化構造について詳しく説明する機会があります。
Mono スクリプト コンポーネントのシリアル化
Unity はすべての Mono スクリプトのコンポーネントを内部でシリアル化し、再起動時にシリアル化されたデータからコンポーネントを再シリアル化します。
デフォルトでは、コンポーネントのパブリック フィールド(パブリック フィールド) がエディタのインスペクター パネルに表示され、パネル上のフィールドに対する変更はシリアル化されて保存され、再読み込み中に失われるのを防ぎます。
ただし、他のフィールド (非パブリック、静的など) または属性 (属性) は [インスペクター] パネルに表示されず、シリアル化されません。
Unity は、非静的、非パブリック フィールドをシリアル化する [SerializeField] 機能を提供します。この機能がこのタイプのフィールドで使用されている限り、フィールドはインスペクター パネルに表示され、シリアル化されますが、依然として非パブリックです。また、Unity は、「m_」や「_」の削除、小文字から大文字への変更、数字へのスペースの追加など、表示されるインスペクター パネル上のフィールドの名前を調整します。
次のように:
public string name1;
[SerializeField]
protected string m_name2;
[SerializeField]
private string _name3;
[HideInInspector]
[NonSerialized]
public string name4;
// 相当于[HideInInspector]和[NonSerialized]一起使用
public string name { set; get; }
もちろん、静的フィールド、属性などの他の値は依然としてシリアル化できません。
Unity は、パブリック フィールドに対して非表示および非シリアル化機能 [HideInInspector] および [NonSerialized] も提供します。
ただし、ほとんどの場合、これら 2 つの関数の代わりに属性を使用してフィールドを制限できます。
最後に、次のようにまとめます。
- デフォルトでは、パブリック フィールドはパネルに表示可能であり、シリアル化されます。
- 非静的フィールドおよび非パブリック フィールドの場合、[SerializeField] 属性を使用して、アクセス権を維持しながらパネル表示とシリアル化を実行できます。
- 静的フィールド、静的および非静的プロパティは、[SerializeField] 属性を使用しても、パネルで表示およびシリアル化することはできません。
- [HideInInspector] 属性と [NonSerialized] 属性を使用して、パネル表示とパブリック フィールドのシリアル化を制御できます。
さて、今日の共有は以上です。皆さんのお役に立てれば幸いです。