アセットを含むオブジェクトにアクセスすることができます。
エディター上で Resources.FindObjectsOfTypeAll を使用してアセットおよびシーンのオブジェクトを見つけることができます。
"Resources" という名前のフォルダー内にあるすべてのアセットは、Resources.Load 関数を介してアクセスすることができます。
複数の "Resources" フォルダーが存在する場合があり、オブジェクトのロード時に全て確認されます。
このクラスは、アセットにアクセスするときパス名を指定しないで、
代わりにメンバー変数を宣言することによってアセットの参照を可能にし、インスペクターでそれを割り当てています。
この方法を使えば、Unity はビルドする時に自動的にアセットの容量を計算することが出来ます。
同じオブジェクトを生成しないので、ゲームサイズを最小限に抑えることができるようになります。
"Resources" フォルダーにアセットを配置する場合はこれが出来ず、結果的に "Resources" フォルダーの全てのアセットはビルドに含まれます。
パス名で利用する欠点として、スクリプトが直接アセットの場所など必要な情報を持つと、他のスクリプトで使用する際、再利用できず同じものを生成してしまうということです。
その一方で、インスペクターに情報が表示され、設定がしやすいという利点もあるので、場合によって使い分けるようにします。
しかし、インスペクター上でリンクするのでなく、アセットを名前でフェッチしたほうが便利な場合があります。
要するにインスペクター上でオブジェクトに参照を割り当てすることが不都合な場合です。
例えばゲームオブジェクトをスクリプトからプロシージャルに作成して、プロシージャル生成したメッシュにテクスチャを割り当てする場合があるかもしれません。
いくつかのロード済みのアセット、特にテクスチャではシーン上にインスタンスが存在しない場合もメモリを多く消費します。アセットが不要となったときに、このメモリを再び使用可能とするには Resources.UnloadUnusedAssets を使用できます。
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void Start() { GameObject go = GameObject.CreatePrimitive(PrimitiveType.Plane); Renderer rend = go.GetComponent<Renderer>(); rend.material.mainTexture = Resources.Load("glass") as Texture; } }
FindObjectsOfTypeAll | type で指定した型の全てのオブジェクトを取得します |
Load | パスを設定し、Resources フォルダーにあるアセットをロードします |
LoadAll | Resources フォルダー内にあるフォルダー・ファイルのパスを設定し、すべてを読み込みます。 |
LoadAsync | パスを設定し、Resources フォルダーにあるアセットを非同期でロードします |
UnloadAsset | メモリから assetToUnload をアンロードします |
UnloadUnusedAssets | 使用していないアセットをアンロードする。 |