こんにちわ、Unityエンジニアのオオバです。

Prefabモードのまま、シーンを実行するとPrefabモードのスクリプトが動いているような気がしたので確認しました。

この記事の内容

手順

条件付きで動く時がありました。

  1. [ExecuteInEditMode]をくっつける
  2. Prefabモードにする
  3. シーンを再生する

すると、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と出力されます。

今回使用したテストコード

PrefabModeTest.cs · GitHub

最後に

気のせいだと思ったけど、気のせいではなかったようです。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事
検証環境