Search Unity

新たなベストプラクティスガイド – Unity におけるメモリ管理

, 6月 27, 2018

エンタープライズサポートでは Unity の機能を様々に組み合わせて多数の事業をサポートさせていただいておりますが、サポートを通じて関わったゲームにはすべてメモリの使用方法に改善の余地がありました。私たちがベストプラクティスガイド「Unity におけるメモリ管理」をまとめた背景はそこにあります。

現場に出向いた際はいつも、まずプロファイリングに最優先で取り組んでいます。CPU に小さいながらも不必要な負担を与えるコーディングパターンや、またはメモリ断片化やアセット重複の原因となる重要な問題など、見つかる問題は様々ですが、いずれにしても早い段階から頻繁にゲームのプロファイリングをするのがアプリケーションを健全な状態に保つ最善の策と言えます。最も大きな成功を収めるチームはプロジェクトのメモリをプロファイリングしているものです。

メモリは非常に希少なリソースです(今日の市場でも 30% を占める、搭載メモリが 1GB 以下のモバイル端末においては特に希少なものとなります)。そのため、自分のメモリがどこで使われていて、また何故そこで使われているのかを知ることは必要不可欠と言えます。 プラットフォーム間でメモリが異なる方法で管理されている場合、メモリが消費されている場所と、メモリが CPU と GPU のパフォーマンスにどのような影響を与えているのかを理解することは極めて重要と言えます。

しかし尻込みする必要はありません。この度、新たなベストプラクティスガイドを作成させていただきました。Unity におけるメモリ管理。このガイドはメモリプロファイリングに利用可能なツールを幅広く紹介しており、それらの効果的な使用方法も詳細に記載しています。Unity マニュアルのベストプラクティスガイド > メモリも参照しつつ、こちらのガイドに記載されたテクニックを用いることで、効率的に問題を見つけ出し、解消することができるでしょう。

これらのガイドを読み、もっと別のベストプラクティスも見てみたくなりましたか?最も新しいベストプラクティスガイドである「Unity におけるメモリ管理の他にも、これまでに私たちがまとめた他のベストプラクティスガイドが多数あり、これらをすべてご覧いただけます。パフォーマンスを取り戻し、プロジェクトに本来の力を発揮させるためのヒントや方法の数々が収められています。ぜひチェックしてみてください。

これらのガイドは定期的に更新されたり、新たな要素が追加されるので時折チェックして新情報を確認してください!

25 replies on “新たなベストプラクティスガイド – Unity におけるメモリ管理”

I am getting the exception with the unity lib files that are compiled only at the time we make the android build. the issue is with libunity.so file

Hi, Thank you so much for writing this article. Is it not recommend to write your game logic/timing inside corountine? Coroutine should be only use for system such as loading asset?

1.) THANK YOU! I’m dying for these “best practices” kind of articles/informational-tutorials. They are wonderful.

2.) Q about Unloading Scenes: https://unity3d.com/learn/tutorials/topics/best-practices/native-memory?playlist=30089#Unloading%20Scenes
This doesn’t happen automatically? (If so, shouldn’t the documentation for LoadScene and LoadSceneAsync clarify?)

3.) How do we leave feedback for these articles in the future? (Say, once this blog post is no longer being monitored.)

4.) Have you considered hosting your docs on github like Microsoft does, to facilitate organized feedback and external contributions?

5.) Thank you again, please keep these kinds of tutorials updated! :)

Nice! We just solved some memory problems in our game. The sprites that we use weren’t being compressed because of the non-power of 2 resolutions. The solution was to put them in atlases. Even though most of the images are around the max size of the atlases (4Kx4K) the result was still 4-8x smaller memory footprint.

Heap explorer looks nice but its not released yet. And the developer is not looking for any more testers at this moment in time.

Excellent resource
It was not obvious to me for a long time that Unity.Object classes need Destroy to be called, even if there is nothing left in scope using the resource (thus no handle to get a hold of it again), to release them from memory.
It is not mentioned in the docs around Texture2D but it is mentioned with RenderTextures for example, not sure if I just missed this or the info is not clear enough in the general scripting docs. Or perhaps UnityEngine.Object is easily confused with a standard C# object?!

After going to “Memory Management in Unity” the first link in there (Managed Memory) runs into an error. The links in here are ok ;)

Comments are closed.