スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Unityでのメモリ管理について

Unityのメモリ管理でハマってしまったのでメモしておきます。

Application.LoadLevel()でレベルを切り替えながら動作させていくと、
どんどんとメモリが圧迫され、最後にはゲームが強制終了してしまうケースについてです。

Unityのバージョン3以降からレベルがロードされた際、そのレベルで参照されている
テクスチャなどがすべてロードされるようになったことも少なからず影響しているようですが。。

ただ、別のレベルをロードした際、前のレベルで参照していたテクスチャが使用したメモリ
くらい解放してくれてもいいのに。。。と思ってしまいます。
コンソールには何やら解放したよとメッセージが出てますからね。笑

さて、上記のようなメモリの問題が発生した場合には、LoadLevel()を行う前に
以下のことを行うとメモリが減ってくれるようです。

(1) Resources.Load()で読み込んで変数に保持しているものについてはnull(javascriptだと)を設定する。
(2) インスペクタで変数に割り当てている場合にも、その変数にnull(javascriptだと)を設定する。
(3) Resources.UnloadUnusedAssets()を呼び出す。

Resource.UnloadUnusedAssets()はどこかで参照されているようなものについては
解放してくれないようなので、「おかしいな。。メモリが減らないなぁ」と思ったら、
どこかで参照したままになっている箇所がないか確認すると道が開けるかも。笑

いやはや
スポンサーサイト

コメントの投稿

非公開コメント

カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。