ルルのゲーム開発備忘録

主にUnityやC#に関する情報を気まぐれに投稿していきま~す

【Unity】実行するまでが劇的に速くなるEnterPlayModeオプションについて

はじめに

今回は、UnityのEnterPlayModeオプションについての紹介です。このオプションをいれるだけで、Unityの実行ボタンをおしてから実行されるまでの時間がものによってはかなり短くなります。

Unity Japanの公式動画での紹介

Unity公式のEnterPlayModeについてのわかりやすい紹介動画がyoutubeにすでにあがっているので、大体のことはこちらを見ればわかります。
自分の記事では、要点だけつまんで紹介しようと思います。
www.youtube.com

EnterPlayModeの要点

UnityのPlayModeが実行されるまでの時間がはやくなる

上記の動画内のサンプルのプロジェクトにおいて

EnterPlayModeオプション オン オフ
起動までの時間 0.15s 4.2s

オプションの設定方法

Edit→ProjectSettings→Editor項目→EditorPlayModeSettings

EnterPlayMode
EnterPlayMode

なぜ速くなるか

通常の実行では、ゲーム実行前にReload Domaine(ドメイン・リローディング)とReload Scene(シーン・リローディング)の二つの処理が走っており、EnterPlayModeオプションをいれるとこれらが省略されるため。

ドメイン・リローディング

c#スクリプティングシステムの再起動のこと。アプリ起動直後(初期化直後)の状態を再現するために走っている処理。
シリアライズ→システム再起動→デシリアライズ の一連の流れ。
ちなみにスクリプトを編集するとコンパイルが走ってUnityが少し止まると思うんですけど、あれと同じ処理です。あれと同じものが実行前にも毎回処理されているって感じみたいです。

シーン・リローディング

現在開いているシーンをリロードする処理。アプリ起動直後(初期化直後)の状態を再現するためにいったん今あるシーンを破棄してからシーンを再度ロードして実行されている。

EnterPlayModeをオンにした時の副作用

ドメイン・リローディングをオフにするとstaticフィールドの初期化が行われなくなる。前回の実行したときの値を引き継いでしまう。SingletonMonoBehaviourパターンを使っている人は注意。一応RuntimeInitializeOnLoadMethodで初期化処理をすれば回避とかはできるが面倒くさい...

シーン・リローディングをオフにした時の副作用はあまりない。動画内でも問題になることはかなり少ないと述べらています。一部、ExecuteInEditModeなどでは挙動が若干変化するらしい。

ほかにはアセットストアで購入したものとかを使う時は気を付けたほうがよさそうです。

その他

デフォルトはオフ設定になっている。

まとめ

シーン・リローディングをオフにするだけでも効果あるかもしれないですね。あとはEnterPlayModeの設定を毎回ProjectSettingsまでいって変更するのは面倒くさいのでエディタ拡張とかですぐ変更できるようにツールバーとかに設置すると便利かもしれません。