渋谷ほととぎす通信

新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。※あくまで個人ブログであり所属組織とは関係ありません

Prefabモードのまま再生すると編集中のPrefabも実行されてしまう気がした件の検証


f:id:esakun:20150730215258g:plain:w450

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

手順

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

  1. Prefabモードにする
  2. [ExecuteInEditMode]をくっつける
  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と出力されます。

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

最後に

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

環境

  • Unity2019.2.8f1