unity3d
Middelen
Zoeken…
Invoering
Met de klasse Resources is het mogelijk om activa die geen deel uitmaken van de scène dynamisch te laden. Het is erg handig wanneer u on-demand middelen moet gebruiken, bijvoorbeeld meertalige audio, teksten, enz. Lokaliseren.
Activa moeten in een map met de naam Bronnen worden geplaatst. Het is mogelijk om meerdere bronnenmappen verspreid over de hiërarchie van het project te hebben. Resources
klasse Resources
inspecteert alle bronnenmappen die u heeft.
Elk item dat in bronnen wordt geplaatst, wordt opgenomen in de build, zelfs als er niet naar wordt verwezen in uw code. Plaats dus geen elementen zonder onderscheid in bronnen.
//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();
}
}
Hulpbronnen 101
Invoering
Unity heeft een paar 'speciaal benoemde' mappen die verschillende toepassingen mogelijk maken. Een van deze mappen heet 'Bronnen'
De map 'Bronnen' is een van de slechts TWEE manieren om middelen tijdens runtime in Unity te laden (de andere zijn AssetBundles (Unity Docs))
De map 'Bronnen' kan zich overal in uw map Activa bevinden en u kunt meerdere mappen met de naam Bronnen hebben. De inhoud van alle mappen met bronnen wordt tijdens het compileren samengevoegd.
De primaire manier om een item uit een map Resources te laden, is door de functie Resources.Load te gebruiken. Voor deze functie wordt een tekenreeksparameter gebruikt waarmee u het pad van het bestand ten opzichte van de map Resources kunt opgeven. Houd er rekening mee dat u GEEN bestandsextensies hoeft op te geven tijdens het laden van een item
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));
}
}
Objecten die uit meerdere objecten bestaan, kunnen ook uit bronnen worden geladen. Voorbeelden zijn dergelijke objecten zijn 3D-modellen met ingebrande structuren of een meervoudige sprite.
//This example will load a multiple sprite texture from Resources named "A_Multiple_Sprite"
var sprites = Resources.LoadAll("A_Multiple_Sprite") as Sprite[];
Alles bij elkaar gezet
Hier is een van mijn helperklassen die ik gebruik om alle geluiden voor elk spel te laden. Je kunt dit aan elk GameObject in een scène toevoegen en het laadt de opgegeven audiobestanden uit de map '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;
}
}
}
Slotopmerkingen
Unity is slim als het gaat om het opnemen van activa in uw build. Elk item dat niet is geserialiseerd (dat wil zeggen gebruikt in een scène die is opgenomen in een build) is uitgesloten van een build. Dit is echter NIET van toepassing op activa in de map Resources. Ga daarom niet overboord bij het toevoegen van middelen aan deze map
Activa die worden geladen met behulp van Resources.Load of Resources.LoadAll kunnen in de toekomst worden verwijderd met behulp van Resources.UnloadUnusedAssets of Resources.UnloadAsset