【ゲーム制作】爆速フレームレート改善!犯人はお前だ!【unity】

アイキャッチ ゲーム制作

こんにちは!SH研究所です!

私がつくった格ゲー シャイニーハートですが、スマホ上で動かしたらフレームレートが低くて困ったことがあります。

この時、unityのプロファイラを使って原因を見つけ、解決することができました。
今回は、その時のお話をします!

原因:フレームレートが低い原因は複数カメラ!

フレームレートが低い原因は、カメラを複数使用していたことが原因でした。カメラを減らすことで問題が解決しました。

詳細:格ゲーをスマホで動作したらフレームレートが低い!

格ゲーを、スマホ上で実行してみました。しかし、安定して60FPSでていませんでした。

フレームレート:1秒間に画面に表示する画像の枚数

FPS :「Frames per second」の略で、フレームレートの単位

60FPSなら、1秒間に60枚の画像を画面に表示する。

上図は、60FPS以内におさまっていますが、実際は安定して60FPSでません。

上図は、処理が重い Renderingと、Scriptsだけを表示しています。しかし、実際にはAnimation、UI等の処理も加算され、さらにフレームレートが低下します。

現状だと、ギリギリで動作している状態!

シャイニーハートのフレームレートは、60FPSで動作する仕様です。

60FPSで動作させるためには、1フレームを約16ms以内で全ての処理を完了しなければなりません。

unityプロファイラで原因解析!

こんな時は、手あたり次第に試してみるより、unityの便利機能「プロファイラ」を使いましょう!

今回は、一番処理が重いRenderingと、Scriptsに注目しました。一番処理が重い箇所を改善できれば、一気に問題解決できる可能性があるためです。

プロファイラを使って、犯人をあぶりだす

プロファイラで気になるところ発見!

プロファイラを確認していると、気になるところを発見しました。

各カメラの処理時間が、ほぼ同じ(1msくらい)

ゲーム上では、カメラを複数使用しています。

  • キャラ1P用
  • キャラ2P用
  • 背景用
  • HPゲージ用
  • その他ゲージ用

私の認識では、キャラクタ、背景はポリゴン数も多く、シェーダも重いので、これらを処理しているカメラは高負荷、HPゲージ等は低負荷で処理される。

しかし、どのカメラも処理時間が、ほぼ同じでした。何で?

実際にカメラを減らしたらどうなるか?

プロファイラを確認した結果、カメラを複数を使用していると高負荷になることが分かったので、カメラを1台にしてみました。

カメラ複数 使用時の処理時間

カメラ1台 使用時の処理時間

複数カメラ使用時の処理時間 9.55 ms

カメラ1台使用時の処理時間 2.07 ms

差分 9.55 – 2.07 = 7.48 ms

かなり改善されました!

実際にスマホ上のフレームレートも、安定して60FPSでるようになりました。

グラフ比較

グラフからも処理が軽くなったことが分かります。

犯人はお前だ!

Unity ブログでも、カメラを複数使用する場合、パフォーマンスが低下する内容が記載されています。

Unity ブログ カメラの使い方を工夫してゲームのパフォーマンスを最適化する方法:パート 2

https://blog.unity.com/ja/games/part-2-optimize-game-performance-with-camera-usage

フレームレートが低い原因 まとめ

カメラを複数使うと、処理が重くなり、フレームレートが低下することが分かりました。

カメラを減らすことで、フレームレートが低下する問題を改善できることが分かりました。

スマホ上で期待したフレームレートが出ない時は、カメラの使用数を減らしてみると改善する可能性がありますので、試してみてください!

参考:動作環境

使用スマホ:Google Pixel 4a(Android 11)

unity:Ver.2021.1.24f1(Windows 10)

面白い格闘ゲームつくりました!公式サイト等からダウンロードできます!フリーゲーム♪
ゲーム制作
シェアする
MYAをフォローする
SH研究所の秘密実験室

コメント