Szukaj…


Wprowadzenie

Dzięki klasie zasobów możliwe jest dynamiczne ładowanie zasobów, które nie są częścią sceny. Jest to bardzo przydatne, gdy trzeba korzystać z zasobów na żądanie, na przykład lokalizować wielojęzyczne pliki audio, teksty itp.

Zasoby należy umieścić w folderze o nazwie Zasoby . Możliwe jest umieszczenie wielu folderów zasobów w hierarchii projektu. Klasa Resources sprawdzi wszystkie foldery zasobów, które możesz mieć.

Każdy zasób umieszczony w zasobach zostanie uwzględniony w kompilacji, nawet jeśli nie ma w nim kodu. Dlatego nie wstawiaj zasobów do zasobów w sposób bezkrytyczny.

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

Zasoby 101

Wprowadzenie

Unity ma kilka „specjalnie nazwanych” folderów, które umożliwiają różnorodne zastosowania. Jeden z tych folderów nosi nazwę „Zasoby”

Folder „Zasoby” jest jednym z DWÓCH sposobów ładowania zasobów w środowisku wykonawczym w Unity (drugim jest AssetBundles (Unity Docs)

Folder „Zasoby” może znajdować się w dowolnym miejscu w folderze zasobów i możesz mieć wiele folderów o nazwie Zasoby. Zawartość wszystkich folderów „Zasoby” jest scalana podczas kompilacji.

Podstawowym sposobem wczytywania zasobu z folderu Zasoby jest użycie funkcji Resources.Load . Ta funkcja przyjmuje parametr ciągu, który pozwala określić ścieżkę do pliku względem folderu Resources. Pamiętaj, że NIE musisz określać rozszerzeń plików podczas ładowania zasobu

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

Obiekty złożone z wielu obiektów można również ładować z zasobów. Przykładami takich obiektów są modele 3D z wypalonymi teksturami lub wiele duszków.

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


Kładąc wszystko razem

Oto jedna z moich klas pomocników, których używam do ładowania wszystkich dźwięków do dowolnej gry. Możesz dołączyć to do dowolnego GameObject w scenie, a załaduje określone pliki audio z folderu „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;
        }
    }
}


Uwagi końcowe

  1. Unity jest sprytny, jeśli chodzi o włączenie zasobów do twojej kompilacji. Każdy zasób, który nie jest szeregowany (tj. Używany w scenie zawartej w kompilacji) jest wykluczany z kompilacji. JEDNAK NIE DOTYCZY to żadnego zasobu w folderze Zasoby. Dlatego nie przesadzaj przy dodawaniu zasobów do tego folderu

  2. Zasoby ładowane za pomocą Resources.Load lub Resources.LoadAll można w przyszłości rozładować za pomocą Resources.UnloadUnusedAssets lub Resources.UnloadAsset



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow