【Unity】【エディタ拡張】ExecuteAlwaysなスクリプトが付いたシーンのAssetBundleをビルドする際にスクリプトが処理される件

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のログが出力されます。

f:id:halya_11:20190703113515p:plain

またAwake()のほかにもOnEnable()OnDisable()OnDestroy()なども呼ばれます。

Strict Modeでビルドする際には注意

この挙動で問題になるのが、上述の各メソッド内で例外が発生するケースです。

例外が発生するだけならまだいいのですが、このときAssetBundleをStrict Modeでビルドしていると
例外発生時にエラーとなりAssetBundleビルド自体が失敗します。

したがってStrict ModeとExecuteAlwaysの組み合わせには注意が必要そうです。