テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】ScriptableObjectのコールバックが呼ばれるタイミングについて

ScriptableObjectのOnEnableが呼ばれるタイミングについてです。

PreloadAssetsに設定した場合

http://cdn-ak.f.st-hatena.com/images/fotolife/t/tsubaki_t1/20151028/20151028000953.png

ゲーム起動直後に呼ばれます。
シーンのロードすらされていないため、OnEnableでFindをかけても何も取得することは出来ません。

ちなみにエディタ起動時にも呼ばれます。

シリアライズしたオブジェクトからの参照

f:id:tsubaki_t1:20151031031709j:plain

参照しているオブジェクトがインスタンス化されたタイミングでOnEnableが呼ばれます。(Instantiateでシーンに配置するタイミングではなく、Resources等で参照して生成出来るようになったタイミングです)

例えばコンポーネントが参照を持っている場合、該当のオブジェクトが読まれたタイミングで呼ばれます。Monobehaviourから参照していた場合、確認している限りはFindは機能するみたいです。

PreloadAssetsから参照されていた場合、ゲーム起動時に呼ばれます。

Resourcesから参照した場合、インスタンス化を行った場合

Resourcesから呼び出したタイミングでOnEnableが呼ばれます。

OnDisableやOnDestroyは何時呼ばれるのか

面倒くさい事に、OnDisableはオブジェクトアンロードのタイミングで呼ばれません。

特にスクリプトインスタンス化していない場合はOnDisableやOnDestroyは呼ばれることは無さそうです。

エディタではOnDisableが「再生する直前」に呼ばれます。

OnDestroyはマニュアルによるとオブジェクト破棄のタイミングで呼ばれるそうですが、Destroy時にもUnload時にも呼ばれません。はて。

関連

tsubakit1.hateblo.jp