Unity ゲーム再生までの時間を短くするEnter Play Mode

Unity上で開発中のゲームを再生すると、始まるまでにメチャクチャ遅かったりしませんか?
そういう時に再生までの時間を短くする方法を紹介したいと思います。
注意点も書いておきます。
今回バージョンはUnity2012.2.1f1です。

Unityスキルアップ、
始めるなら今

パズル、脱出、RPG...目標のゲームを完成させよう!

人気のUnity講座はこちら

Udemy講座

Enter Play Mode

やり方はとても簡単です。
Edit > Project Settings > Editor > Enter Play Mode Optionsにチェックを入れれば終わりです。
Enter Play Mode OptionsはEditorの下の方にあります。

チェックありとなしでどれくらい速さが違うのか実験してみます。
まずはチェックなしです。

続いてチェックありです。

チェックありだとすぐにゲームが起動しキャラクターのアニメーションが始まりました。
これはどうして早くなるかというと、チェックの下にある「Reload Domain」「Reload Scene」が関係しています。

Reload Domain

Reload Domainはスクリプトの状態をリセットしてくれるものだそうです。
これをオフにすることで毎回リセットする処理を省いてゲームの再生が早くなるそうです。

Reload Scene

先程のReload Domainがスクリプトをリセットするのに対し、こちらは再生すると既存のゲームオブジェクトをすべて破棄して、ディスクからシーンを再ロードするそうです。
シーンが複雑になればなるほどこの時間が長くなります。
なのでオフにすることでゲームの再生までの時間が短縮されます。

注意点

staticな値がリセットされない

Reload Domainはスクリプトの初期化を行ってくれているわけですが、それをオフにすることでstaticな値がリセットされなくなります。
具体的に実験してみます。
スペースキーを押したらstaticのintの値が増えていくようにしてみます。

このようなコードがあった場合、Reload Domainがオフだったらどのような挙動になるでしょうか。
ゲーム再生 > スペースキー押す > ゲーム停止 > ゲーム再開 > スペースキー押す
この流れでログを確認してみます。

いかがでしょうか?停止して再開してもcountの値はリセットされていないのがわかるかと思います。
これを回避するには[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]を使うと良いです。
ゲームを再生するときに指定した関数を呼ぶことができます。

これでInitCountという関数が起動時に呼ばれcountを0にしています。
実験してみます。

無事にstaticな値がリセットされているのが確認できました。
注意点として起動時に指定する関数はstatic関数にしてください。

staticなイベントがリセットされない

Unityではstaticイベントが多数あります。
Reload Domainが有効な場合(通常)、ゲーム再生が終了したタイミングで自動的に破棄されますが、Reload Domainがオフだと破棄されません。
ゲーム再生終了時のイベントApplication.quittingに処理を登録して実験してみます。

これで実験してみます。

ゲーム再生停止を繰り返すたびにApplication.quittingに処理が追加されていき、ログに「ゲーム終わり」が一つずつ増えていくのがわかります。
これをリセットするには再生時にRuntimeInitializeOnLoadMethodで設定した関数を呼び出してイベントを破棄することで解消できます。
具体的にはこんな感じです。

start関数内で Application.quitting += _quitで処理を加えているのとは逆にApplication.quitting -= _quitで登録している処理を破棄しています。

実際に試し見てます。

このような感じで終了時のイベントの処理は破棄され、一度だけ実行されるのが確認できるかと思います。

このような注意点がありますが、Enter Play Modeを使うことでとても快適にUnityエディタ上でゲームを再生できます。

おすすめUnityオンライン学習

一人でゲーム開発が不安な方はオンラインスクールで学習すると効率が良いと思います。
以下に当てはまる人は検討してみると良いかもしれません。

「ゲーム作りけど何から初めればいい?」
「入門書をの次に何をしたらいいの?」
「疑問や問題を一人で解決出来ない。。」
「ゲームを完成させる自信がない。。」
「気軽に質問できる環境が欲しい。。」

自分で学習することに限界を感じたら
オンライン学習しましょう!

Udemy

Udemy
特徴:教材動画買い切り型
レッスン方法:動画教材/Q&Aで質問
習得スキル:教材動画によって異なる
コース概要: ピンポイントで作りたいゲームジャンルの動画を見つけることができるかもしれません。 また頻繁にセールを開催していますのでゲーム開発講座が1500円~で購入することも可能です。
ゲームジャンル別おすすめ講座はこちら Udemy 詳細

テックアカデミー

テックアカデミー
特徴:現役エンジニア伴走型レッスン
レッスン方法:チャット(週2回)/テキストチャット/課題レビュー
習得スキル:オリジナルゲームアプリの作成
コース概要: 途中で挫折しないためにメンター(相談者)が週2回、マンツーマンであなたの質問・相談に答えてくれるので、ゲーム開発・プログラミング未経験の人でも安心してゲーム開発に取り組めます。転職したい人向けのサポートもあります。無料体験もあります。
テックアカデミー 詳細

テックスタジアム

テックスタジアム
特徴:ゲーム開発の為のオンラインスクール
レッスン方法:動画教材,Slackでの質問(24時間)
習得スキル: Unity,UnrealEngine、CG、企画、サーバー、AI、XR等
コース概要: ゲーム業界で必須な技術の習得が可能です。Slack上で待機している先生への24時間、何度でも質問できます。またIT・ゲーム業界への就職サポートが無料で受けられます。
ゲーム開発に特化したオンラインスクールですので、Unityはもとより、他のゲームエンジンやゲーム業界に興味がある方にはオススメです。
テックスタジアム 詳細

デジハリONLINE

デジハリONLINE
特徴:動画カリキュラム型レッスン
レッスン方法:動画講座/Slack/予約制Zoom相談
習得スキル:Unity基礎,実践/ハイクオリティ3Dゲーム
コース概要: デジタルハリウッド大学・大学院などを通じたデジタルコンテンツ業界とのつながりを活かし、最新かつ実践的なカリキュラムを提供しています。【基礎編】【実践編】とカリキュラムが分かれていて、それぞれに課題があり、ご自身の理解度を把握できます。最終的にはハイクオリティの3Dゲームが作れるようになります。
デジハリONLINE 詳細

関連記事

最後までご覧頂いてありがとうございました。

セール中!

Unity講座 対象コースが¥1,500~

期間限定 セール開催中!今が学びのチャンス♪