UnityでExecuteAlwaysアトリビュートを付けたコンポーネントがアタッチされているシーンにおいて、
AssetBundleをビルドする際にスクリプトの処理が走ってしまう件についてまとめました。
Unity2019.1.0
ExecuteAlwaysなスクリプトがAssetBundleビルド時に処理される
まずExecuteAlwaysなスクリプトを作ります。
using UnityEngine; [ExecuteAlways] public class Example : MonoBehaviour { public void Awake() { Debug.Log("Awake"); } }
これをアタッチしたGame Objectが存在するシーンを作ります。
そしてこのシーンをAsset Bundleにしてビルドします。
するとシーンのAssetBundleがビルドされた時にAwakeのログが出力されます。
またAwake()
のほかにもOnEnable()
、OnDisable()
、OnDestroy()
なども呼ばれます。
Strict Modeでビルドする際には注意
この挙動で問題になるのが、上述の各メソッド内で例外が発生するケースです。
例外が発生するだけならまだいいのですが、このときAssetBundleをStrict Modeでビルドしていると
例外発生時にエラーとなりAssetBundleビルド自体が失敗します。
したがってStrict ModeとExecuteAlwaysの組み合わせには注意が必要そうです。