Unity のビルトイン機能の中には自動的にシリアル化を使用するものもあります。以下はその概要です。
詳しくは スクリプトシリアル化 を参照してください。
Unity はシリアル化を使って シーン、アセット、アセットバンドル をコンピューターのハードドライブに (または、ハードドライブから) ロードして保存します。これには、独自のスクリプティング API オブジェクトに格納される MonoBehaviour コンポーネントや スクリプタブルオブジェクト などのデータも含まれます。
エディターの再生モードと編集モードで発生します。
インスペクターウィンドウ でゲームオブジェクトのコンポーネントのフィールドの値を表示/変更するときに、Unity はこのデータをシリアライズしてからインスペクターウィンドウに表示します。フィールドの値を表示しているときは、インスペクターウィンドウは Unity のスクリプティング API と通信しません。スクリプトのプロパティーを利用する場合は、インスペクターウィンドウの値の表示や変更を行う場合、プロパティーのゲッターやセッターはまったく呼び出されません。なぜなら、Unity は直接インスペクターウィンドウのフィールドをシリアライズするからです。
スクリプトを変更して保存すると、Unity は現在ロードされているすべてのスクリプトデータをリロードします。まず、ロードしたすべてのスクリプトにシリアライズ可能な変数すべてを格納し、スクリプトをロードした後にそれらを復元します。 シリアライズ可能でないすべてのデータは、スクリプトのリロード後に失われます。
これは、プロジェクト内のすべてのエディターウィンドウとすべての MonoBehaviour に影響します。Unity でのシリアル化の他のケースとは異なり、private のフィールドは、 ‘SerializeField’ 属性を持たなくても、リロード時にデフォルトでシリアル化されます。
シリアル化では、 プレハブ は 1 つまたは複数の ゲームオブジェクト と コンポーネント のシリアル化されたデータです。プレハブインスタンスには、プレハブソースとその変更のリストの両方への参照が含まれています。変更は、その特定のプレハブインスタンスを作成するために、Unity がプレハブソースに行う必要があるものです。
プレハブインスタンスは、Unity エディターでプロジェクトを編集している間だけ存在します。プロジェクトのビルド中、Unity エディターは、プレハブソースとプレハブインスタンスの変更の 2 つのシリアル化のデータからゲームオブジェクトをインスタンス化します。
プレハブ や ゲームオブジェクト などの シーン に存在するもののために Instantiate を呼び出すとき、Unity エディターはプレハブやゲームオブジェクトをシリアライズします。 これは、ランタイムとエディター、両方で発生します。UnityEngine.Object から派生するものすべてはシリアライズされます。
それから、Unity は新しいオブジェクトを作り、データを新しいゲームオブジェクトにデシリアライズ (つまり読み込み) します。次に、Unity が同じシリアル化コードを異なるバリアントで実行し、他にどの UnityEngine.Objects
が参照されているかを連絡します。すべての参照された UnityEngine.Objects
を検証し、それらがインスタンス化されたデータの一部であるかどうかを確認します。参照がテクスチャのような「外部」の何かを指している場合は、その参照をそのまま保持します。参照が子ゲームオブジェクトのような「内部」の何かを指している場合には、対応するコピーの参照を適用します。
Resource.GarbageCollectSharedAssets()
は、ネイティブの Unity ガベージコレクターで、標準の C# ガベージコレクターとは異なる働きをします。シーンをロードした後に実行され、参照されなくなったオブジェクト (テクスチャなど) を確認して安全にアンロードします。ネイティブ Unity ガベージコレクターは、オブジェクトが外部の UnityEngine.Objects
へのすべての参照を報告するバリエーションでシリアライザーを実行します。このようにして、1 つのシーンで使用されたテクスチャが次のシーンでアンロードされます。
• 2017–05–15 公開ページ