【Unity】【解決】iOSのみ処理が重たい!カクカクする!と思って原因を調べたらしょうもなさすぎた

Unityで作っていたゲームが一通り完成して、あとはGooglePlayとApp Storeに公開すればOK!

…と思いきやまさかのiOSのみ処理がカクついてしまう(実機確認はほぼずっとAndroidでしていて気付かなかった)状態になってしまったので、原因とか色々調べたときのメモ。

結果めちゃくちゃ原因がしょうもなかったので、愚かな初心者の備忘録としてここに残しておきます。。

調査方法(何はともあれプロファイラー)

とりあえず何が原因なのかを調べる必要があるので、作成したUnityアプリをビルドしたiOS端末(自分はiPod Touch)でアプリを起動して、UnityのProfiler(プロファイラー)で確認しました。

実機の処理負荷の状態を見る方法は以下の記事がとても参考になります。

LIGHT11
【Unity】iOS実機の処理負荷をUnityのProfilerで見る手順(Wifi接続) - LIGHT11 UnityでiOS実機の処理負荷をUnityのProfilerでWifi経由で見る手順をまとめました。

プロファイラで何が原因かを探る

プロファイラーが起動できたら、実際に負荷の状態を見てどこが原因かを探りにいきます。

画面左にある「Rendering、Scripts、Physics…」等の項目が色付きで表示されていると思いますが、その部分割合が多いほど負荷の高さ(FPSの低下)の原因となっている可能性があります。

例えばRenderingなら画面の描画関連で負荷が高まっている可能性あり、ScriptならC#スクリプトで効率の悪い書き方をしてしまっているかも…等

というわけで、自分のアプリのプロファイラを見てみます。気持ちRenderingが高めな気もしますが…VSyncが高い

Unity初心者過ぎてVSyncが何者か分からなかったのでさっとググって見ると「ディスプレイの更新のタイミングに同期させて処理を行う仕組み」とのこと。

VSyncとはディスプレイの更新のタイミングに同期させて処理を行う仕組みで、垂直同期とも言われる。
VSyncをOFF(Don’t Sync)にすると最高のパフォーマンスを得られるが、
ティアリングという描画のズレが起きる可能性がある。

【速いぜ!】スマホ向けUnity高速化Tips

なるほどなるほど。ざっくり言うとFPSを安定させるために調整してくれる機能みたいですね。

あれ?ということはむしろ余裕がある…?

というか良くみたらFPS自体は安定して……あ。

めちゃくちゃ安定してるやん(30FPSで)

原因・解決方法

というわけで「アプリ全体のフレームレートの設定を60FPSに指定していなかったため、iOSのみデフォルトの30FPSで動作していた」というのが今回の自分場合の原因でした。どおりでフレームごとに座標動かす処理でズレると思った。。

よくよくUnity公式のドキュメントを見ると「iOS固有の最適化」のセクションに書いてあります。

フレームレートの設定
Unity iOS ではアプリケーションがレンダリングループを実行する頻度を変更することが可能です。デフォルトでは 30 フレーム毎秒です。バッテリー消費を節約するためにこの数字を下げることはできますが、この節約はフレーム更新が犠牲になります。

iOS 固有の最適化 – Unity マニュアル

問題の箇所を修正する

そうと分かればあとは修正するだけ。

上記ドキュメント内にもリンクがありますが、フレームレートの設定を変更するには以下のようにすればOK。書くのはどこでも良いと思います、大抵の場合はアプリ開始時に最初に呼び出されるスクリプト内のAwake()の中で呼び出せばOKかなーと思います。

    private void Awake()
    {
        // フレームレート設定(FPS60にしたい場合)
        Application.targetFrameRate = 60;
    }

これで解決しました!なんてしょうもない…!w

とはいえRendringやScriptが原因であればもっと修正が大変だったと思うし、そのあたりに大きな問題があるような作り方はしてなかったのでそこは安心しました!

よかったよかった〜

【余談】他の原因でカクカクする、重いときは?

今回僕はFPSをデフォルトの30のままにしてるという超初歩的なミスでしたが、負荷対策は他にも色々やりようがあります。

色々調べていて「なるほど、こういう方法もあるのか〜」と勉強になった記事を以下に貼っておくので良ければ参考にしてみてください。

夕方ゲーム制作
Unity製アプリが遅いので軽量化した - 夕方ゲーム制作 Unityで製作中のゲームアプリが、実機で動かすととにかく重かったので、何とかまともに動くまでに軽くしました。 次にアプリを作るときに同じ罠に嵌らぬよう、やったことを...

【Unity】作ったゲームが重い・カクカクするときの対処法まとめ | くろくまそふと

よかったらシェアしてね!
  • URLをコピーしました!