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

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

関連記事

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

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

【Flutter】動画配信アプリの作成(2022年版・無料)

はじめに とあるきっかけから動画撮影・個別配信アプリを作りたいなということでいろいろなサイトで調べていました。 が・・・配信アプリ作成がうまく行かない。 例) ローカルネットワークでライブ配信する(2 …

【Flutter】(初心者向け)カメラ・動画アプリを理解しながら作る

今回の記事はモバイルのカメラ&動画撮影アプリをまず動かしてみて、何を実装しているのか解説・理解しながら、作成を進めるコンセプトで進めていきます。 なぜなら、この記事の著者はとあるきっかけからモバイル( …

C#(Unity) 2D障害物ゲームのマップをインスペクタから作成・設定する例

知りたい方がいらっしゃったので書いてみました。 インスペクタから設定できると、データベース不要で簡単に複数マップを作成・管理できるところが良いところだと思います。 設定ファイルの作成 MapSetti …

「1人で遊べる最もシンプルな脳活ゲーム NEXT CARD」制作しました

皆さま、お疲れ様です( ^o^) だいぶ更新間隔が空きましたが、いかがお過ごしでしょうか。 ゲーム紹介 今回はMeisyoとは異なる別の制作物を作っていました。 珍しくトランプカードゲームです。 1人 …