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モードでも実行されます。