UnityのTexture2Dのメモリが大きすぎる件について
にゃんこ大戦争のようなゲームを作成する際、大量にアニメーション画像を使用しているのですが、それが約800MBと、メモリを圧迫しています。どのようにすれば解消されますでしょうか。
試したこと
↓のスクリプトを何度か呼んでみたものの、まったくTexture2Dのメモリの使用量が減りません。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Unload : MonoBehaviour { private int FlameCount = 0; private bool IsUnloaded = false; private void Update() { FlameCount++; if(FlameCount >= 5&& !IsUnloaded) { IsUnloaded = true; UnloadTexture(); Destroy(this.gameObject); } } public void UnloadTexture() { 何もないところで } }
追記
image.texture = example.pngのような、スクリプトから代入するということはせず、
インスペクターのspriterendererなどに直接置くという形をとっております。
メモリの大半を占めているのがアニメーション画像であり、それは
animatorから呼び出されています。
その画像が、開いているシーン中ではどこからも参照されていないのにメモリから解放されません。
###試したこと
何も配置されていないシーンでResources.UnloadUnusedAssets();を呼び出す→解決されない
推測
アニメーション画像のついたanimatorのついているオブジェクトをプレハブ化しており、
もしかしたらこれがあることによって「参照されている画像」判定が入っており、
Resources.UnloadUnusedAssets();を使用しても解放されないのかもしれません。
本来であればアニメーションなどをスクリプトから作るべきであり、
それを一斉にnullにしたのちにResources.UnloadUnusedAssets();を
呼び出すと解放される、という形なのでしょうか?
追記2
ゲームオブジェクトを生成する前と生成したあとのメモリについてです。
Unityの起動時の、ほとんどTextureがメモリに入っていない場合、アニメーションによってTextureが読み込まれるたびに、そこで使用していたTextureがメモリに入ります。
その後Resources.UnloadUnusedAssets()
を使用してもそのメモリは開放されません。
あなたの回答
tips
プレビュー