概要
各シーンで使用する素材(SEやBGMやスプライトなど)を○○Managerなどにアタッチしておき、
あらかじめヒエラルキー上に配置しておくとメモリの消費が激しい。
メモリが多いPCなどでアプリを実行する場合はあまり気にする必要性はないが
スマートフォン上だとメモリが足りなくなり、アプリがクラッシュする問題が発生する。
そのため、Resourcesなどを使用して該当の素材を使用する時のみ読み込むようにした方がよい。
また使用しなくなった素材についてはメモリ開放を行い快適なアプリ環境を保つ必要性がある。
Resourcesを使うメリット、デメリット
-
メリット
メモリに優しい -
デメリット
スクリプトの再利用性がなくなる場合がある
Resourcesからデータを読み込む
//スプライトの読み込み
private Sprite buttn;
buttn = Resources.Load("Image/StageSelect/OrangeButton", typeof(Sprite)) as Sprite;
//BGM(SE)の読み込み
private AudioSource audioSource;
audioSource = gameObject.AddComponent<AudioSource>();
audioSource.clip = Resources.Load("Sound/BGM/sample") as AudioClip;
//Prefabの読み込み
GameObject prefab;
prefab = (GameObject)Resources.Load ("Prefabs/sample");
メモリを開放する
シーンの切替時にもメモリ開放される(?)かもしれないけれど、とりあえず明示的にも記載しておく方がよい。
//現在使用していないアセットを破棄する
Resources.UnloadUnusedAssets();
参考サイト
-
複数のリソースの読み込み速度の検証結果
http://baba-s.hatenablog.com/entry/2015/02/03/095136 -
ResourcesからスライスしたSpriteを取得する3つの方法
http://tsubakit1.hateblo.jp/entry/20131222/1387654182 -
Unity プレハブの動的生成を止まらないようにする
http://crosstie-bell.com/blog/unity%E3%80%80%E3%83%97%E3%83%AC%E3%83%8F%E3%83%96%E3%81%AE%E5%8B%95%E7%9A%84%E7%94%9F%E6%88%90%E3%82%92%E6%AD%A2%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/ -
Resourcesから非同期でインスタンス化する
http://tsubakit1.hateblo.jp/entry/2014/08/21/005830 -
Unity でリソースの解放を行う
http://loumo.jp/wp/archive/20140419000115/ -
公式リファレンス
http://docs.unity3d.com/ja/current/ScriptReference/Resources.html