Prefabモードのまま、シーンを実行するとPrefabモードのスクリプトが動いているような気がしたので確認しました。
手順
条件付きで動く時がありました。
- Prefabモードにする
[ExecuteInEditMode]
をくっつける- シーンを再生する
すると、Prefabモードのスクリプトが動いたままになってしまいます。
(シーンに存在しないのにAwake、Start、Updateなどのイベント関数が動いてしまう)
通常は起きない
Prefab Mode in Play Mode was blocked by the script 'PrefabModeTest' to prevent the script accidentally affecting Play Mode. See the documentation for [ExecuteInEditMode] and [ExecuteAlways] for info on how to make scripts compatible with Prefab Mode during Play Mode.
[ExecuteInEditMode]
をくっつけたスクリプトが存在するPrefabをPrefabモードにしたままシーンを再生すると、上記の警告が表示されPrefabモードは解除されてしまいまいPrefabモードのままスクリプトが動くことはありません。
OnValidateは例外
ただしOnValidateメソッドだけは例外でExecuteInEditModeを解除した状態且つ、OnValidate内に処理を書いているとシーン開始時にOnValidate内の処理が走ります。
void OnValidate() { Debug.Log(Application.isPlaying); // falseと出力される }
ちなみにApplication.isPlaying
はfalseと出力されます。
今回使用したテストコード
最後に
気のせいだと思ったけど、気のせいではなかったようです。
環境
- Unity2019.2.8f1