RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

モバイル制作 Unity(C#) Meisyo4(監督たちの甲子園)

C# 最適化による読み込み速度向上実験

投稿日:

ゲーム 監督たちの甲子園(仮)で、オーダー設定を作っています。
ただ、動作がクソ重いので最適化でどれくらい重いのか、最適化するとどうなるのか比較したいと思います。

動作イメージは下記の通りです。

動画の通りPCでも少しフリーズします。少し古いスマホだとちょっとイラっとするくらい待機時間が入ります。

実験はオーダー設定の3種類の時間をカウントします。
DisplayOrderFirst:オーダー(スタメン、控え、ベンチ外)の表示
ChangeOrder:メンバー変更
ChangeBench:ベンチメンバー設定

読み込み速度測定利用するデバイスは、よくあるノートPCです。

全く最適化をしていないので重いのかな;つД`)

最適化方法はUnity 最適化メモに準じます。

結果

DisplayOrderFirst:53%減
ChangeOrder:75%減
ChangeBench:69%減

大きく削減効果が見られました
とてもスムーズに動作するように感じます!

最も効果があったのは、Instantiate()、Destroy()回数の最適化でした。
選手表示用のGameObjectの生成を何度も行うことをやめ、必要なタイミングだけInstantiateを行うようにしました。
オブジェクトプールは元々同じようなものが導入されており、より読み込み回数が少なくなるように変更しました。

その他はLinq削除、Debug.Log削除、Start, Awake, OnEnable で負荷の重い処理をしないを行いました。
上記のInstantiate()に関して、Start, Awake, OnEnable で負荷の重い処理をしないと組み合わせて・・・ChangeOrder用とChangeBench用のGameObject生成にはプリロード関数を作っておき、負荷がかかりにくいタイミングでupdate(フラグ管理)で読み込みをします。

負荷が気にならない部分に読み込みを分散するのは、体感に大きな影響を与えそうですね!

最適化前

DisplayOrderFirst:256ms
ChangeOrder:121ms
ChangeBench:129ms


クリック時の引っかかり感がどうしても気になる…。PCでこれはキツい。

最適化後

DisplayOrderFirst:120ms(ロード80ms、表示40ms)
ChangeOrder:30ms
ChangeBench:40ms


クリック時の引っかかり感がなくなりました。

コメント

クリック時の待機時間がかなり気にならなくなりました。
いずれかの選手を交代すると複数のデータを再設定する必要があるのですが、今回は生成部分を大きくカットした仕様となります。

より最適化するのであれば、交代に関与していない選手の再ロードは必要ないので、削減が考えられます。
とはいえ再ロードを含めた表示速度が30~40msのため、それほど改善の余地はないでしょう。

Meisyo3(前作)では、野球の試合中になぜか重い・・・続けていると落ちることが多くありました。orz
今回はこちらを利用しつつ、体感良く作れるようにします!

確かにInstantiate()の調整やオブジェクトプールの積極的な利用、プリロードの最適化もしてなかったな。。。

-モバイル制作, Unity(C#), Meisyo4(監督たちの甲子園)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【Flutter】Googleアカウント認証SHA-1キーのためにkeytoolを使えるようにする

FlutterのGoogleアカウントでの認証(Authentication)のためにSHA-1キーが必要です。ただし、簡単に取得ができません。そのため、下記を参考にして進めます。 Google Au …

【Unity(C#)】メインカメラの挙動に合わせて、サブカメラもアスペクト比に合わせて伸縮させる

メインカメラの挙動は以下参考にしました。ありがとうございました! Unityの画面のアスペクト比と解像度を自動変換 全スマホ・複数解像度に対応させる 使い方 メインカメラとサブカメラを作成。 メインカ …

Meisyo3のサービス終了、監督たちの甲子園(Meisyo4)への注力

Meisyo3のサービスを終了します。 継続ユーザーがほぼいないので動かしている意味がない・・・オワタ/(^o^)\ 失敗した原因はさまざまありました。 ・アプリストア上で一目で楽しそうな見た目をして …

【Flutter】ToDoアプリの作成

StatefullWidgetの状態管理、データの受け渡し、デバイスへのToDoリスト保存の解説がなかったので例となるアプリを作成しました。 こちらのアプリを応用すれば、大体のアプリが作れるのではない …

Unity 2022.3.18f1 エラー「FSBTool ERROR: Internal error from FMOD sub-system.」の対策

FSBTool ERROR: Internal error from FMOD sub-system.と出て、音声ファイルを読み込めない時の対策です。 今回起こったのはMP3ファイルだったので、ファイ …