unity3d
Ресурсы
Поиск…
Вступление
С классом ресурсов можно динамически загружать активы, которые не являются частью сцены. Это очень полезно, когда вам нужно использовать активы по требованию, например, локализовать многоязычные аудио, тексты и т. Д.
Активы должны быть помещены в папку « Ресурсы» . Возможно, что в иерархии проекта имеется несколько папок ресурсов. Класс 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;
}
}
}
Итоговые заметки
Unity является разумным, когда дело доходит до включения активов в вашу сборку. Любой объект, который не сериализуется (т.е. используется в сцене, включенной в сборку), исключается из сборки. ОДНАКО, что это НЕ применяется к любому активу в папке Ресурсы. Поэтому, не переходите за борт при добавлении активов в эту папку
Активы, которые загружаются с использованием ресурсов. Load или Resources.LoadAll могут быть выгружены в будущем с помощью ресурсов. Ресурсы или ресурсы Ресурсы.UnloadAsset