【Unite 2017】ScriptableObjectについてメモ
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
この講演を見たので、メモします。
Scriptable Object
UnityEngine.Objectの派生クラス
UnityのシリアライズシステムではScriptableObjectを読み書きできる(メンバ変数)
Unityはこれから出てくる様々な参照を理解してトラッキングしてくれる
シンプルかつ単純なAPI
MonoBehaviourとの比較
ファイルについて
MonoBehaviour
セーブ→他のオブジェクトと一緒に保存される
MonoBehavior, GameObject, Transform
Prefabの一つのコンポーネントを変えるとファイル全体が変わる
↑シーンも
ScriptableObject
独自。バージョン管理には便利
コンフリクトを避けられる
例
MonoBehaviorで宣言
最大ライフをNPCで調整すると他の人が触れない
一つずつ個別にプログラムを書かないといけない
間違って誰かが変える可能性がある
コードでのコンテンツのチェックが必要
ScriptableObject
一つのオブジェクトにまとめる
MonoBehaviorで宣言していた変数をまとめる
メリット
値を別のところに切り分けられる
値のアップデートが直ぐにできる
シーン、プレハブのロードが早くなる
UnityではScene,Prefabの中のものや紐づけされているものを全てシリアライズしている
重複データのチェック、圧縮はない
それをロードするときにはそのプロパティ全てをロードする
↓
全部を単一のScriptableObjectにつっこめばそれを一度だけシリアライズすることでまとめて参照される
作成する方法
動的
ScriptableObject.CreateInstance
セーブする
AssetDatabase.CreateAsset();
AssetDatabase.AddObjectToFile();
[CreateAssetMenu]
コールバック
OnEnable
ScriptableObjectがロード、インスタンス化されたら呼ばれる
ScriptableObject.CreateInstance();
OnDestroy…Destroyされたあと
OnDisable…Destroyされるとき
ScriptableObject
Texture, AudioClipなどと同じ
他のアセットのと同じように存在する