Version: 2017.2
ストリーミングアセット
エディターの高度なトピック

ScriptableObject

ScriptableObject はスクリプトインスタンスから独立した大量の共有データを格納できるクラスです。SerializedObject と混同しがちですが、こちらはエディタークラスであり、目的も違うものです。例えば 100 万の int の配列をもつスクリプト付きのプレハブ作ったとします。配列は 4 MB のメモリを使用し、プレハブがオーナーです。プレハブをインスタンス化するたびに、その配列が複製されます。ですから、ゲームオブジェクトを 10 個作成した場合、10 インスタンス合計で 40 MB の配列のデータになります。

すべてのプリミティブ型、文字列、配列、リスト、Unity に特有の Vector 3 などの型や、カスタムクラスを Unity は serialize 属性により宣言されたオブジェクトに属する複製としてシリアライズします。例えば SerializableObject を作成して integer が 1 万個だけ格納した場合、配列はそのインスタンスに格納されます。インスタンスは個別のデータのオーナーとして扱われます。ScriptableObject のフィールドや任意の UnityEngine.Object フィールドである MonoBehaviour、Mesh、GameObject 等は値でなく参照が格納されます。ScriptableObject は配列を格納します。ScriptableObject への参照があるプレハブのインスタンスが 10 個あり、4 MB のデータを保有する場合、合計はあくまで 4 MB となり前例のように 40 MB とはなりません。

ScriptableObject を使用する場面は、値の複製をさけることでメモリ消費を節約するときですが、プラグ可能なデータセットを定義することにも使用できます。例をあげると RPG における NPC キャラクターのショップです。例えばカスタムの ShopContents ScriptableObject で複数のアセットを作成して、それぞれで購入可能なアイテムを定義できます。ゲームに 3 つのゾーンがあると仮定すると、それぞれのゾーンで異なるレベルのアイテムを提供できます。ショップのスクリプトの中で ShopContents オブジェクトを参照して利用可能なアイテムを定義できます。サンプルについてはスクリプトリファレンスを参照してください。

ScriptableObject 派生のクラスに付けることのできる CreateAssetMenu によって簡単にカスタムアセットを作成することができます。

Tips: インスペクター上で ScriptableObject からの参照を扱う場合、参照フィールドをダブルクリックして ScriptableObject を開きます。またカスタムのエディターを作成して、その型が表すデータが管理しやすいようにインスペクターの外見を定義できます。

ストリーミングアセット
エディターの高度なトピック
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961