Resources フォルダを使用した各種ファイルの読み込み

シェアする

Unity でテクスチャや音などをゲームオブジェクトに適用する際、エディタにあるインスペクタ欄で操作すると思う。基本的に使用するファイルは予めセットしないといけない。ファイル数が多いと大変。

それとは別に Resources フォルダに入れたファイルはスクリプトから Resources クラスによりアクセスする事ができます。

例えば以下のような感じ。

// テクスチャー
// Resources/Textures/HogeTexture を読み込んで NGUI の UITexture に適用している
GameObject.Find("Image").GetComponent<UITexture>().mainTexture
    = Resources.Load("Textures/HogeTexture") as Texture2D;

// オーディオクリップ
audio.clip = Resources.Load ("Sounds/HogeSound") as AudioClip

// テキスト
// Resources 直下にある HogeText を読み込む
TextAsset textAsset = Resources.Load("HogeText") as TextAsset;

// プレハブを Resources からインスタンス化してみる
GameObject hoge = Instantiate(Resources.Load ("Prefabs/HogePrefab")) as GameObject;

複数のファイルを読み込む場合は Resources.LoadAll が利用できる。

GameObject[] textures = Resources.LoadAll("Textures");

// 型指定で読み込む時はジェネリック使える
Texture2D[] textures = Resources.LoadAll<Texture2D>("Textures");
Sponsored Links

使わないものは Unlaod する

リソース沢山読み込むとやはりメモリも使うので、使わなくなったアセットがありそうなら Resources.UnloadUnusedAssets() を呼ぶ。(らしいんだけど、ちょっと今手元に Pro ライセンスなくてプロファイラで確認できない)

Resources.UnloadUnusedAssets();

Resources フォルダは複数使用できる

Resources フォルダはどこに配置しても良く、さらに複数存在していても良いらしい。

複数あっても1つの Resources フォルダとして扱うようだ。

ファイル名が重複したらどっちが来るのか謎だし管理が面倒な事になりそうだけど...。

Resources の欠点

Resources 以下に保存したファイルは使用しなくてもビルドに含まれてしまうので管理しないと無駄にバイナリのサイズが大きくなる。

また、巨大なファイルや大量のファイルを一度に読み込むとゲームが止まるっぽい。

もう一つの問題は、この処理を非同期で実行することができない事。
色々調べて分かったけど、どうもResources.Loadを別スレッドに乗せて実行することが
出来ないらしい。

なので必然的に(大きい||大量なファイル)を読み込む際はゲームが停止する。

Resources を利用したほうが都合が良いファイルだけにとどめておいたほうが良いと思う。

Sponsored Link

シェアする

フォローする