1WGJで作ったゲームのパフォーマンス改善のためにやった4つのこと
今回は1WeekGameJamで作成したゲーム「Train Flow」のパフォーマンス改善のためにアップデートで行ったことについて備忘録も兼ねて書いていこうと思います。
作ったもの
Train Flow | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
「目次」
- 1.ロードシーンを挟んでロード時のストレスの低減
- 2.シーンに含めるGameObjectの数を減らす
- 3.動的生成したオブジェクトを動的にDestroy()
- 4.QualitySettingsのV Sync Count を変更
1.ロードシーンを挟んでロード時のストレスの低減
製作時はとにかく期間内に動くものを作るというスタンスで製作を行っており、パフォーマンスについてあまり意識していなかったため、完成したプロジェクトの起動時間が約2分と、長くなりすぎてしまいました。
そこでシーン開始時にGameObject数の少ないロードシーンを挟み、その間にシーンを非同期ロードすることで若干のロード時間短縮とストレスの低減を行いました。
結果
ロード時間についてはほぼ変化なし。演出強化にはなったかも。
2.シーンに含めるGameObjectの数を減らす
シーンに初期状態で含めるGameObjectの数を最小限にし、Startで動的生成を行うことで起動時間の短縮を測った。
結果
ロード時間が大幅に短くなったが、動的生成の処理でパフォーマンスが落ちた。
→そこで一斉に生成するのではなくコルーチンで時差的にロードすることでパフォーマンスの低下が許容範囲になった。
ロード時間が2分から1分くらいに。
3.動的生成したオブジェクトを動的にDestroy()
2で動的生成したオブジェクトをCameraに映らなくなったら動的に削除することにより、SetPassCallを減らす。一斉に削除すると逆にパフォーマンスが落ちるので2と同じく、コルーチンで時差的に削除。
結果
パフォーマンスの改善に成功。SetPassCallが許容範囲に。
4.QualitySettingsのV Sync Count を変更
QualitySettingsのV Sync CountをEvery V BlankからEvery Second V Blankに
V Sync Countについては以下の公式マニュアルを参照して下さい。
結果
少しパフォーマンスが良くなった...かも
他にもスクリプトの微修正などを行い、目に見えるくらいパフォーマンスを改善することができました。(元々がマイクラ的建築手法で作っていたので当たり前といえば当たり前ですが)
今後のアップデートについてですが、今後もバグ修正やパフォーマンス改善については行っていこうと思いますが、アップデートで機能追加については行わないつもりです。
機能追加をしたものは「Train Flow Extend」みたいに名前を変えてリリースする予定です。
1weekGAMEJam企画及びunityroomの運営をして下さったnaich様に感謝致します。
AssetBundleは次回かな