Version: 2017.1
スクリプトのシリアル化
カスタム製のシリアル化

ビルトインのシリアル化

Unity のビルトイン機能の中には自動的にシリアル化を使用するものもあります。以下はその概要です。

詳しくは スクリプトシリアル化 を参照してください。

保存とロード

Unity uses serialization to load and save Scenes, Assets, and AssetBundles to and from your computer’s hard drive. This includes data saved in your own scripting API objects such as MonoBehaviour components and ScriptableObjects.

エディターの再生モードと編集モードで発生します。

インスペクターウィンドウ

インスペクターウィンドウ でゲームオブジェクトのコンポーネントのフィールドの値を表示/変更するときに、Unity はこのデータをシリアライズしてからインスペクターウィンドウに表示します。フィールドの値を表示しているときは、インスペクターウィンドウは Unity のスクリプティング API と通信しません。スクリプトのプロパティーを利用する場合は、インスペクターウィンドウの値の表示や変更を行う場合、プロパティーのゲッターやセッターはまったく呼び出されません。なぜなら、Unity は直接インスペクターウィンドウのフィールドをシリアライズするからです。

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 編集レビュー 無しにパブリッシュされたページ

スクリプトのシリアル化
カスタム製のシリアル化