サーチ…


前書き

Resourcesクラスを使用すると、シーンの一部ではないアセットを動的にロードすることができます。オンデマンドアセットを使用する必要がある場合、たとえば多言語のオーディオ、テキストなどをローカライズする場合には非常に便利です。

アセットは、 Resourcesという名前のフォルダに配置する必要があります。複数のリソースフォルダをプロジェクトの階層全体に分散させることは可能です。 Resourcesクラスはあなたが持っている可能性があるすべてのResourcesフォルダを検査します。

リソース内に配置されたすべてのアセットは、コード内で参照されていなくてもビルドに含まれます。したがって、リソースに無差別にアセットを挿入しないでください。

//Example of how to load language specific audio from Resources

[RequireComponent(typeof(AudioSource))]
public class loadIntroAudio : MonoBehaviour {
    void Start () {
        string language = Application.systemLanguage.ToString();
        AudioClip ac = Resources.Load(language + "/intro") as AudioClip; //loading intro.mp3 specific for user's language (note the file file extension should not be used)
        if (ac==null)
        {
            ac = Resources.Load("English/intro") as AudioClip; //fallback to the english version for any unsupported language
        }
        transform.GetComponent<AudioSource>().clip = ac;
        transform.GetComponent<AudioSource>().Play();
    }
}

リソース101

前書き

Unityには、さまざまな用途に使用できるいくつかの「特別な名前の」フォルダがあります。これらのフォルダの1つは「リソース」と呼ばれ、

'Resources'フォルダは、Unityで実行時に資産を読み込む2つの方法のうちの1つです(もう1つはAssetBundles(Unity Docs)

'Resources'フォルダはAssetsフォルダのどこにあってもかまいません。また、Resourcesという名前の複数のフォルダを持つことができます。すべての 'Resources'フォルダの内容は、コンパイル時にマージされます。

Resourcesフォルダーからアセットをロードする主な方法は、 Resources.Load関数を使用することです。この関数は文字列パラメータを取ります。このパラメータを使用すると、Resourcesフォルダに対するファイルのパスを指定できます。アセットをロードする際にファイル拡張子を指定する必要はありません

public class ResourcesSample : MonoBehaviour {  
    
    void Start () {
        //The following line will load a TextAsset named 'foobar' which was previously place under 'Assets/Resources/Stackoverflow/foobar.txt'
        //Note the absence of the '.txt' extension! This is important!

        var text = Resources.Load<TextAsset>("Stackoverflow/foobar").text;
        Debug.Log(string.Format("The text file had this in it :: {0}", text));
    }
}

複数のオブジェクトで構成されるオブジェクトも、リソースからロードできます。そのようなオブジェクトは、テクスチャが焼き付けられた3Dモデル、または複数のスプライトです。

//This example will load a multiple sprite texture from Resources named "A_Multiple_Sprite"
var sprites = Resources.LoadAll("A_Multiple_Sprite") as Sprite[];


すべてを一緒に入れて

ここでは、すべてのサウンドをすべてのゲームにロードするために使用するヘルパークラスを紹介します。これをシーン内の任意のGameObjectに添付することができ、指定されたオーディオファイルを 'Resources / Sounds'フォルダからロードします

public class SoundManager : MonoBehaviour {
    
    void Start () {

        //An array of all sounds you want to load
        var filesToLoad = new string[] { "Foo", "Bar" };

        //Loop over the array, attach an Audio source for each sound clip and assign the 
        //clip property.
        foreach(var file in filesToLoad) {
            var soundClip = Resources.Load<AudioClip>("Sounds/" + file);
            var audioSource = gameObject.AddComponent<AudioSource>();
            audioSource.clip = soundClip;
        }
    }
}


ファイナルノート

  1. Unityは、アセットをビルドに組み込む場合にはスマートです。シリアル化されていない(つまり、ビルドに含まれているシーンで使用されている)資産は、ビルドから除外されます。ただし、これはResourcesフォルダ内の資産には適用されません。したがって、このフォルダにアセットを追加するには外に出さないでください

  2. Resources.LoadまたはResources.LoadAllを使用してロードされるアセットは、将来、 Resources.UnloadUnusedAssetsまたはResources.UnloadAssetを使用してアンロードできます



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow