unity3d
risorse
Ricerca…
introduzione
Con la classe Resources è possibile caricare dinamicamente asset che non fanno parte della scena. È molto utile quando devi utilizzare le risorse su richiesta, ad esempio localizzare audio, testi, ecc. Multilingue.
Le risorse devono essere collocate in una cartella denominata Risorse . È possibile avere più cartelle di risorse distribuite lungo la gerarchia del progetto. Resources
classe delle Resources
ispezionerà tutte le cartelle Risorse che potresti avere.
Ogni risorsa inserita nelle Risorse sarà inclusa nella compilazione anche se non è referenziata nel tuo codice. Quindi non inserire risorse in Risorse indiscriminatamente.
//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();
}
}
Risorse 101
introduzione
Unity ha alcune cartelle "appositamente denominate" che consentono una varietà di usi. Una di queste cartelle è chiamata "Risorse"
La cartella "Risorse" è uno dei soli due modi per caricare le risorse in fase di runtime in Unity (l'altra è AssetBundles (Unity Docs)
La cartella "Risorse" può risiedere ovunque all'interno della cartella Risorse e puoi avere più cartelle denominate Risorse. Il contenuto di tutte le cartelle "Risorse" viene unito durante la compilazione.
Il modo principale per caricare un asset da una cartella Risorse è utilizzare la funzione Resources.Load . Questa funzione accetta un parametro stringa che consente di specificare il percorso del file relativo alla cartella Risorse. Si noti che NON è necessario specificare le estensioni di file durante il caricamento di una risorsa
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));
}
}
Gli oggetti che sono composti da più oggetti possono anche essere caricati da Risorse. Esempi sono tali oggetti sono modelli 3D con trame in forno, o un folletto multiplo.
//This example will load a multiple sprite texture from Resources named "A_Multiple_Sprite"
var sprites = Resources.LoadAll("A_Multiple_Sprite") as Sprite[];
Mettere tutto insieme
Ecco una delle mie classi di supporto che uso per caricare tutti i suoni per qualsiasi gioco. Puoi allegarlo a qualsiasi GameObject in una scena e caricherà i file audio specificati dalla cartella "Risorse / Suoni"
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;
}
}
}
Note finali
Unity è intelligente quando si tratta di includere risorse nella tua build. Qualsiasi risorsa non serializzata (cioè utilizzata in una scena inclusa in una build) è esclusa da una build. TUTTAVIA, questo NON si applica a nessun bene all'interno della cartella Risorse. Pertanto, non esagerare nell'aggiungere risorse a questa cartella
Le risorse caricate utilizzando Resources.Load o Resources.LoadAll possono essere scaricate in futuro utilizzando Resources.UnloadUnusedAssets o Resources.UnloadAsset