あなたのモバイルゲーム開発の最適化時間を数ヶ月節約する方法(メモリ篇)

みなさん、こんにちは。こちらはUWA Technologies(略称UWA)です。

今日は「あなたのモバイルゲーム開発の最適化時間を数ヶ月節約する方法」の最後のパート「メモリ」についてご説明いたします。

前回の文章をまだ読まれていない皆様は、是非移動してご覧ください。

「あなたのモバイルゲーム開発の最適化時間を数ヶ月節約する方法(レンダリング篇)」

「あなたのモバイルゲーム開発の最適化時間を数ヶ月節約する方法(UI+ロード篇)」


メモリ

メモリパートに最も重要なのはメモリの割り当てメモリリークです。

ほとんどのプロジェクトでは、アセットメモリMonoメモリという2つの大きなメモリ割り当てがあります。 ここでは、最初にアセットメモリについて説明します。


アセットメモリ

UWAレポートでは、テスト中にテクスチャメモリの割り当てを記録できます。 大事なのは、Monoメモリテクスチャフォーマットです。

また、メモリの詳細を知りたい場合は、クリックして詳細を表示できます。


実例

これはゲーム「Kiwame」からのデータです。テクスチャの詳細情報を見ることができます。 この中に、「アセット名」、「メモリ割り当て」、「解像度」、「フォーマット」などが含まれます。NewUI1_rgbが16 MBで非常に大きいことがわかります。 開発チームはそれを チェックして、最適化する必要があるかどうかを確認できます。

また、アセット管理にも注意する必要があります。表から1つ以上のアセットを選択、それらの使用情報がチャートに表示されます。アセットがいつロードされ、いつアンロードされるかを確認でき、メモリリークを分析することには非常に有用であります。


メッシュ

次にメッシュの詳細を見に行きます。

アニメーションクリップ、オーディオクリップ、シェーダー、フォント、RT、パーティクルシステムなど、すべての詳細情報を直接かつ迅速に見ることができます。


結果

これは 、テクスチャ、およびオーディオの最適化の結果です。


Monoメモリ

二番目に大きいメモリはMonoメモリです。

このように、全体的なMonoメモリ割り当てに注目すべき、メモリの合理性を確認する必要があります。

UWAレポートは、関数のコールスタックと詳細なメモリ割り当てを示します。それで、重要な関数名をすばやく確認できし、コードで検索して最適化することができます。


結果

こちらは結果です。25日をかかって、Monoメモリは150MBから50MBに最適化されました。


メモリリーク

メモリ部分に、非常に難しい難問があります。それはメモリリークです。以前には、メモリリークを分析して解決するには、2〜3か月は常に必要でした。

UWAレポートでは、常駐Monoメモリを表示できます。グラフにMonoメモリがこのように増える一方で、下がらない場合には、つまり、メモリリークが発生したということです。

じゃあどうすれば修正できますか? チャートの2つのサンプルを比較して、Monoメモリの増分を見つけます。

このプロジェクトでは、メモリのほとんどの増加が、InstantateGamObjectという関数のInstantiateによるものであることがわかります。

これらは、garbage collectedできない変異体です。 そして、開発チームは関数を直接チェックして、どのコンテナーがそれらを参照しているかを確認できます。その後、コードをすばやく最適化できます。


結果

これが結果です。 3日後、このプロジェクトでは、メモリリークの問題がほぼなくなりました

これは別の例です。 ただ1日で、メモリリークの問題が改善しました。

現在、中国でUWA GOTを使っているゲームプロジェクトは、メモリリークの問題は約3日で大幅に改善できます

過去のメモリリークの割合は約50%でしたが、昨年、UWA GOTでMonoメモリ分析を開始して以来、割合は25%に低下しています。

今回、UWA GOTが日本のゲーム開発者たちに役立つことを願っています。


UWAおよびUWA GOTについてもっと了解したい場合には、UWA公式サイトに移動してください。
UWA GOTを使っていたnowsprintingさんも自身のブログでUWA GOTについて詳しく説明してしましたが、興味があれば「やらなイカ?」に移動してご覧ください。


UWA公式サイト:https://jp.uwa4d.com

UWA公式ブログ:https://blog.jp.uwa4d.com

UWA公式Q&Aコミュニティ(中国語注意)https://answer.uwa4d.com