Поиск…


Вступление

С классом ресурсов можно динамически загружать активы, которые не являются частью сцены. Это очень полезно, когда вам нужно использовать активы по требованию, например, локализовать многоязычные аудио, тексты и т. Д.

Активы должны быть помещены в папку « Ресурсы» . Возможно, что в иерархии проекта имеется несколько папок ресурсов. Класс 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 имеет несколько «специально названных» папок, которые позволяют использовать различные виды использования. Одна из этих папок называется «Ресурсы»,

Папка «Ресурсы» - один из двух способов загрузки активов во время выполнения в Unity (другой - AssetBundles (Unity Docs)

Папка «Ресурсы» может находиться где угодно внутри вашей папки «Активы», и вы можете иметь несколько папок с именем «Ресурсы». Содержимое всех папок «Ресурсы» объединяется во время компиляции.

Основным способом загрузки актива из папки «Ресурсы» является использование функции « Ресурсы» . Эта функция принимает строковый параметр, который позволяет указать путь к файлу относительно папки «Ресурсы». Обратите внимание, что вам не нужно указывать расширения файлов при загрузке актива

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 в сцене, и он загрузит указанные аудиофайлы из папки «Ресурсы / Звуки»

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 является разумным, когда дело доходит до включения активов в вашу сборку. Любой объект, который не сериализуется (т.е. используется в сцене, включенной в сборку), исключается из сборки. ОДНАКО, что это НЕ применяется к любому активу в папке Ресурсы. Поэтому, не переходите за борт при добавлении активов в эту папку

  2. Активы, которые загружаются с использованием ресурсов. Load или Resources.LoadAll могут быть выгружены в будущем с помощью ресурсов. Ресурсы или ресурсы Ресурсы.UnloadAsset



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow