Recherche…


introduction

Avec la classe Ressources, il est possible de charger dynamiquement des actifs qui ne font pas partie de la scène. C'est très utile lorsque vous devez utiliser des ressources à la demande, par exemple localiser des audios multilingues, des textes, etc.

Les actifs doivent être placés dans un dossier nommé Ressources . Il est possible d'avoir plusieurs dossiers de ressources répartis dans la hiérarchie du projet. Resources classe de Resources inspectera tous les dossiers de ressources que vous pourriez avoir.

Chaque actif placé dans les ressources sera inclus dans la version, même s'il n'est pas référencé dans votre code. N'insérez donc pas d'actifs dans Resources sans distinction.

//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();
    }
}

Ressources 101

introduction

Unity dispose de quelques dossiers «spécialement nommés» qui permettent une variété d'utilisations. Un de ces dossiers est appelé "Ressources"

Le dossier 'Resources' est l'un des deux seuls moyens de charger des ressources lors de l'exécution dans Unity (l'autre étant AssetBundles (Unity Docs)).

Le dossier 'Resources' peut résider n'importe où dans votre dossier Assets et vous pouvez avoir plusieurs dossiers nommés Resources. Le contenu de tous les dossiers "Ressources" est fusionné au moment de la compilation.

Le principal moyen de charger un actif à partir d'un dossier Ressources consiste à utiliser la fonction Resources.Load . Cette fonction prend un paramètre de chaîne qui vous permet de spécifier le chemin du fichier par rapport au dossier Resources. Notez que vous n'avez pas besoin de spécifier des extensions de fichier lors du chargement d'un actif

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));
    }
}

Les objets composés de plusieurs objets peuvent également être chargés à partir de Ressources. Les exemples sont de tels objets sont des modèles 3D avec des textures cuites ou un sprite multiple.

//This example will load a multiple sprite texture from Resources named "A_Multiple_Sprite"
var sprites = Resources.LoadAll("A_Multiple_Sprite") as Sprite[];


Mettre tous ensemble

Voici l'une de mes classes d'assistance que j'utilise pour charger tous les sons pour n'importe quel jeu. Vous pouvez attacher ceci à n'importe quel GameObject dans une scène et charger les fichiers audio spécifiés à partir du dossier '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;
        }
    }
}


Notes finales

  1. L'unité est intelligente quand il s'agit d'inclure des actifs dans votre build. Tout élément qui n'est pas sérialisé (c'est-à-dire utilisé dans une scène incluse dans une génération) est exclu d'une génération. TOUTEFOIS, cela ne s'applique à aucun élément du dossier Ressources. Par conséquent, n'allez pas trop loin en ajoutant des actifs à ce dossier

  2. Les actifs chargés à l'aide de Resources.Load ou Resources.LoadAll peuvent être déchargés ultérieurement à l'aide de Resources.UnloadUnusedAssets ou Resources.UnloadAsset.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow