【Unity】【エディタ拡張】Unity2018.3以降ExecuteInEditModeアトリビュートは廃止に向かっていく

Unity2018.3以降ExecuteInEditModeアトリビュートは廃止に向かっていくお話です。

廃止に向かう経緯

MonoBehaviourにExecuteInEditModeアトリビュートを付けると、再生中じゃなくてもUpdateとかが呼ばれます。

[ExecuteInEditMode]
public class Example : MonoBehaviour
{
    public void Update() => Debug.Log("Update.");
}

ただこれはUnity2018.3でPrefabモードが実装される前に作られたアトリビュートなので、
これが付いているMonoBehaviorをPrefabモード中に実行しても問題ないのかどうか判別できません。
よって、このアトリビュートは今後徐々に廃止に向かっていくとのことです。

ちなみに再生中にExecuteInEditModeが付いたコンポーネントがアタッチされたPrefabをPrefabモードで編集しようとすると、
以下の警告を吐いてPrefabモードには入ることができません。

Prefab Mode in Play Mode was blocked by the script 'SomeScript' to prevent the script accidentally affecting Play Mode. 

Unity2018.2以前のワークフローで作っていたPrefabには注意が必要そうです。

今後どうすればいいのか?

今後は代わりにExecuteAlwaysアトリビュートを使うのが正しいようです。

[ExecuteAlways]
public class Example : MonoBehaviour
{
    public void Update() => Debug.Log("Update.");
}

これを付けたコンポーネントは再生中じゃなくても実行されるし、Prefabモードでも実行されます。

参考

docs.unity3d.com

docs.unity3d.com