Suche…


Einführung

Mit der Ressourcenklasse können Assets, die nicht Teil der Szene sind, dynamisch geladen werden. Dies ist sehr nützlich, wenn Sie On-Demand-Assets verwenden müssen, z. B. mehrsprachige Audios, Texte usw.

Assets müssen in einem Ordner namens Resources abgelegt werden. Es ist möglich, mehrere Ressourcenordner über die Projekthierarchie zu verteilen. Resources prüft alle Ressourcenordner, die Sie möglicherweise haben.

Jedes in Resources platzierte Asset wird in den Build aufgenommen, auch wenn es nicht in Ihrem Code angegeben ist. Fügen Sie daher Ressourcen nicht wahllos in Resources ein.

//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();
    }
}

Ressourcen 101

Einführung

Unity verfügt über einige speziell benannte Ordner, die eine Vielzahl von Anwendungen ermöglichen. Einer dieser Ordner heißt "Ressourcen".

Der Ordner "Resources" ist eine von nur zwei Möglichkeiten, Assets zur Laufzeit in Unity zu laden ( die andere ist AssetBundles (Unity Docs).

Der Ordner "Resources" kann sich an beliebiger Stelle innerhalb des Assets-Ordners befinden, und Sie können mehrere Ordner mit dem Namen Resources haben. Der Inhalt aller 'Resources'-Ordner wird während der Kompilierzeit zusammengeführt.

Die primäre Methode zum Laden eines Assets aus einem Resources-Ordner besteht in der Verwendung der Resources.Load- Funktion. Diese Funktion benötigt einen String-Parameter, mit dem Sie den Pfad der Datei relativ zum Ordner Resources angeben können. Beachten Sie, dass Sie beim Laden eines Assets KEINE Dateierweiterungen angeben müssen

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));
    }
}

Objekte, die aus mehreren Objekten bestehen, können auch aus Ressourcen geladen werden. Beispiele hierfür sind 3D-Modelle mit eingebetteten Texturen oder mehrere Sprites.

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


Alles zusammen setzen

Hier ist eine meiner Helfer-Klassen, mit denen ich alle Sounds für jedes Spiel laden kann. Sie können dies an jedes GameObject in einer Szene anhängen und die angegebenen Audiodateien werden aus dem Ordner 'Resources / Sounds' geladen

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;
        }
    }
}


Abschließende Anmerkungen

  1. Unity ist intelligent, wenn es darum geht, Assets in Ihren Build einzubinden. Alle Assets, die nicht serialisiert sind (dh in einer Szene verwendet werden, die in einem Build enthalten ist) werden von einem Build ausgeschlossen. Dies gilt jedoch NICHT für alle Ressourcen im Ordner Ressourcen. Gehen Sie daher beim Hinzufügen von Assets zu diesem Ordner nicht über Bord

  2. Assets, die mit Resources.Load oder Resources.LoadAll geladen werden, können zukünftig mit Resources.UnloadUnusedAssets oder Resources.UnloadAsset entladen werden



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow