Unity ゲーム再生までの時間を短くするEnter Play Mode
Unity上で開発中のゲームを再生すると、始まるまでにメチャクチャ遅かったりしませんか?
そういう時に再生までの時間を短くする方法を紹介したいと思います。
注意点も書いておきます。
今回バージョンはUnity2012.2.1f1です。
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エディタ上でゲームを再生できます。
関連記事
TextMeshProでリンクを作成する方法とそのバグの解消法
今回はTMPのリンクを生成するLinkタグについて紹介したいと思います。
ちょっとしたハマりポイントもあるのでそちらについても触れていきたいと思います。
UnityでCSVを活用したメッセージウィンドウの作り方
メッセージの内容を変更したい時や、新しいメッセージを追加したい時にCSVファイルを使えば、メッセージの編集や追加が簡単になり、開発がスムーズになります。
Unity2D ドット絵の簡単なアニメーションを作ってみる
Unity2Dで簡単なドット絵のアニメーションを作成します。スプライトを切り替えることでプレイヤーが歩いているように見えるアニメーションを作成してみます。
この方法を応用することでキャラクターに色んな動きや表示を付け加えることができると思います。
ChatGPTの指示通りUnityゲームを作ってみる
最近ではChatGPTを始め様々な大規模言語モデルの対話型AIが公開されていますね。
そこで今回はChatGPTの指示に従ってゲームを作ってみる実験をしてみます。
Unityで9-sliceテクニックを使った効果的なUI作成方法
UI作成時に非常に便利なテクニック9-sliceをやってみます。
とても簡単に使える技です。
Transform.RotateとQuaternion.Eulerでオブジェクト回転
Unity2Dで簡単なゲームオブジェクトの回転を実装してみたいとおもいます。
Transform.RotateとQuaternion.Eulerの二種類の回転方法を実験します。
ルーレットとか、方位をコンパス。またはプレイヤーがやられた時に回転させるなどに使えそうです。
最後までご覧頂いてありがとうございました。