unity3d
Zasoby
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
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
Zasoby ładowane za pomocą Resources.Load lub Resources.LoadAll można w przyszłości rozładować za pomocą Resources.UnloadUnusedAssets lub Resources.UnloadAsset