質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4937閲覧

Unityで製作したゲームの実機でのシーンロード時間が長すぎる

MONOMONOSU

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/10/29 15:24

編集2020/10/30 13:34

前提・実現したいこと

初めて利用させて頂きます。至らぬ点ございましたら申し訳ございません。
Unityを使用し、2Dのスマホゲームを製作しています。
PCでプレイする分にはロードが長いと感じる事はないのですが、スマホにてゲームをプレイしてみると、ロード時間が5秒以上かかってしまうシーンが2つ程ありました。
動きの少ない&ネット対戦などは無いゲームなので、ロード時間が長すぎる気がします。
Profilerにて実行に時間がかかっている箇所を調べたのですが、その処理を軽くする方法が解りません。
実現したい事は、この長すぎるロード時間が短縮できればと思い、質問させて頂きました。

発生している問題・エラーメッセージ

イメージ説明
イメージ説明
イメージ説明

(1枚目)PCでのprofiler (2枚目)スマホでのprofiler - Timeline (3枚目)スマホでのprofiler - Hierarchy Profilerを使用し、CPU等の使用率・実行時間を調べました。 シーンロード時、スマホでの実行時間が異常に長い処理を見つけました。ロード体感時間ともほぼ一緒なので、恐らくこの処理が原因かと予想しています。 原因と思われる処理は自作したメソッドではないので、Unity固有の処理かと思われます。 処理について調べResources.Load()を使わないような仕組みになどに変更などをしても改善が見られませんでした。 また、3枚目にあるApplication.WaitForAsyncOperationToCompleteについて、LoadSceneAsyncが原因かな?と思ったのですが、LoadSceneAsyncは現時点で使用はしていません。 上の画像にある処理について詳しい方がおられましたら、ご教授願いたいです。

試したこと

・SceneManager.LoadSceneAsync("シーン名") でシーンを非同期でロードしておき、短縮を図る
こちらにあるようにLoadSceneAsyncの仕様で一度にロードしておけるシーンの数は1つまでなので効果小
・効果音など、取得するのに時間がかかりそうな所は初期ロード時にキャッシュするようにした
→効果なし
・BuildSettingのCompressionMethodにてアプリの圧縮を行った。
→効果なし
・Resources.Load()は重いらしいので使わず、アセットをインスペクターに直接アタッチするようにした
→効果なし

補足情報(FW/ツールのバージョンなど)

(Unityバージョン)Unity 2018.3.2f1 (64-bit)
(テスト機器)Huawei P30 lite
(PC)Windows10 Home 64bit / core i5 8250U / メモリ8GB

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MONOMONOSU

2020/10/30 13:39

アドバイス頂きありがとうございます。 DeepProfileを使用しようとしたところ、Editor内での調査はできるのですが実機での調査はできないようでしたので、Hierarchyモードでの表示画像を追加で挿入させて頂きました。 教えて頂いたリンク、参考にさせて頂きます。
lazh

2020/10/30 15:07

すみません勘違いしてました。2018.3は実機でDeepProfileは対象外みたいです https://docs.unity3d.com/ja/current/Manual/profiler-profiling-applications.html GCAllocが210.5kとちょっと重いのでその辺りを何とかしないとダメそうですが、 自作したメソッドではないとのことなので修正出来るかわからないですね そのメソッドの情報をいただけると何かわかるかもしれません 参考 GC最適化 https://baba-s.hatenablog.com/entry/2018/01/10/090000#GC https://sleepygamersmemo.blogspot.com/2019/01/unity-optimizing-gc-collect.html
MONOMONOSU

2020/10/30 16:20

とんでもございません。親切に対応して下さり、ありがとうございます。 今のところ、Hierarchyで見た感じボトルネックになっていそうな処理 Application.WaitForAsyncOperationToComplete は →非同期でのシーンロードの完了まで待機する処理 https://answers.unity.com/questions/788722/profile-spike-on-applicationwaitforasyncoperationt.html という解釈をしております。しかしながら、LoadSceneAsyncなどの非同期によるシーンのロードは1度試したのち、削除したので問題は他にあるのかもしれません。 確かに言われて気が付いたのですが、GCAllocの値が高いですね... 張っていただいたリンクで勉強させて頂いたのですが、GCAllocはメモリの確保⇔解放を行うために確保した領域という感じでしょうか? (勉強不足で申し訳ございません)
lazh

2020/10/30 17:19 編集

自分も説明できるほど詳しくないのでガベージコレクションで調べてもらえれば... メモリの確保解放を手動でやっていたのを自動でやってくれる機能って感じでしょうか 上の参考以外にも最適化に関して色々あるので調べてみてください Application.WaitForAsyncOperationToCompleteで調べるとこんなのが出てきました https://stackoverflow.com/questions/51177827/unity-editor-long-application-waitforasyncoperationtocomplete-self-ms-time-af 特定のGameObjectを消したら良くなったみたいな事書いてたので適当に検証したんですが、 UIのTextを70個ほど配置したシーンから何もないシーンに飛ぶと3枚目と同じような感じになりました ロード時間が5秒以上かかってしまうシーン2つに共通した前シーンまたは前シーン同士が似たよう構成であればそいつの影響かもしれないですね(追記 Editor上での確認なのでビルド時には発生しないかもしれないです)
MONOMONOSU

2020/10/30 17:50

メモリの管理に関して未熟なので勉強してみようと思います。 なるほど確かに問題のあるシーンではUIを含めGameObject多くなっているので、そこを見直すことで改善できるような気がしてきました! 対応して下さりありがとうございますm(_ _)m
MONOMONOSU

2020/11/01 15:16

無事に解決致しました。 アドバイス頂きました通りロードの遅いシーンのGameObjectを消す作業をしていたところ、BGMの読み込みを管理しているスクリプトをアタッチしたオブジェクトを消した途端、ロードが爆速になりました。 lazhさんのアドバイスがなければ途方に暮れていたところでした。本当にありがとうございます!m(_ _)m
guest

回答1

0

自己解決

無事解決しました。
シーンをロードする度にBGMを読み込んでいるのですが、これが原因となりスパイクを起こしていたようです。
アプリの起動時にあらかじめBGMをstatic変数にキャッシュしておき、ロード時に毎回読み込まなくてもすぐに使用できるような仕組みにすることで解決いたしました。
5秒ほどかかっていたロード時間が環境にもよりますが、ほぼ0秒になりました。

投稿2020/11/01 15:09

MONOMONOSU

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問