どこでゲームのメモリ領域を浪費している?

投稿日: 2020-06-26 09:15:30

Unity Memory Profilerパッケージを使用して、ゲームでメモリを浪費している場所を正確に見つける方法

1. Unityメモリプロファイラーとは何ですか?

Unity Memory Profilerは、ゲームのメモリを正確に消費している場所を見つけることができる実験的なパッケージです。 つまり、次のことが可能になります。 このツールはさまざまな方法で使用できます。 Unity Memory Profilerスナップショット:ツリービュー このツールをすぐに使い始める方法を見てみましょう。

2. Unityメモリプロファイラーをすぐに使い始める方法

すべてのパッケージと同様に、インストールは簡単です。 パッケージマネージャーを開き(ウィンドウ→パッケージマネージャー)、詳細セクションで試験運用パッケージ有効にします *注:Unity 2020.2以降では、実験的なパッケージを別の場所で有効にします。このオプションは、プロジェクト設定→パッケージマネージャーにあります。これはUnityがこれらのパッケージを見つけにくくする方法であるため、人々はそれらの不安定性(PRノイズが多すぎる)について不平を言うのをやめたと思います。 Unity 2020.2+:プレビューパッケージを有効にする このパッケージをインストールしたら、メモリプロファイラーを開きます(ウィンドウ→分析)。 Unityメモリプロファイラーウィンドウで、分析するプロジェクトを実行しているターゲットプレーヤー選択します(例:エディター、Android、SNES、ゲームボーイなど)。 そして、あなたは何をすべきか知っています。ヒットキャプチャボタンを。 注:大量のノイズが発生するため、エディターでのキャプチャは避けてください。私の場合、Unityはプレーヤーのスナップショットをキャプチャしないので、エディターに行かなければなりませんでした(私はそれが不安定であるかもしれないと述べましたか?)

3.ゲームでメモリ最適化の機会を見つける方法

キャプチャボタンをクリックして、コーヒーを飲みに行きました。 数秒(または数分(または数時間(またはまったく)))した後、キャプチャしたスナップショット開くことができます Unityは、デフォルトで、キャプチャ時のゲームのメモリレイアウトのツリーマップを表示します。 以下に示すように、各セグメントには、1つのアセットタイプとそのRAM内のサイズが表示されます。 Unity Memory Profilerスナップショット:ツリービュー さて、これがクールなことです。そのセグメントをクリックすると、すぐにフリップして、メモリを盗んでいる特定のアセットを表示します ここで、先ほど開いTexture2Dセクションを詳しく見てみましょう Unity Memory Profilerスナップショット:ツリービュー さて、これがクールなことです。そのセグメントをクリックすると、すぐにフリップして、メモリを盗んでいる特定のアセットを表示します ここで、先ほど開いTexture2Dセクションを詳しく見てみましょう このリソースを見たことがあると思います。もう一度確認しましょう... だから私はそのリソースに移動し、何が悪いのかを即座に見つけます。 Unityテクスチャ:非圧縮形式 Whooops、Rubenはこのブログ投稿のテクスチャ圧縮をオンにするのをだらだらと「忘れていました」。 Unityテクスチャ:DXT1形式 プロセスを要約しましょう:
  1. メモリプロファイラパッケージをインストールします。
  2. それを開き、必要なゲームの状態をキャプチャします。
  3. 大きいセクションをクリックして、予想よりも多くのメモリ使用しているアセット分析します。
  4. これらのアセットで何が起こっているかを診断します(主にインポート設定)。
  5. それらを修正します。
このプロセスに従うことで、メモリ最適化の機会を見つけることができます ここにあなたが見つけることができる他のものがあります:過度のシェーダーバリアント、巨大なヒープデータを持つスクリプト、特大のレンダーテクスチャ、メモリリーク...リストは続きます。 次回は、さまざまなビジュアライズモードについて詳しく説明します。 それでは、次は何ですか? 正直なところ、「無料のUnityパフォーマンスチェックリストを入手する」を繰り返すのは少し古くなっています。 Unity Memory Profilerで遊んで、楽しみましょう。 あなたはそれがゲームの何を明らかにするかを見て驚かれることでしょう 〜ルーベン