web-dev-qa-db-fra.com

Utilisation du dossier de ressources dans Unity

J'ai développé un projet HoloLens qui doit référencer des fichiers .txt. J'ai les fichiers stockés dans le dossier "Resources" d'Unity et je les fais fonctionner parfaitement (lorsqu'ils sont exécutés via Unity):

string basePath = Application.dataPath;
string metadataPath = String.Format(@"\Resources\...\metadata.txt", list);

// If metadata exists, set title and introduction strings.
if (File.Exists(basePath + metadataPath))
{
      using (StreamReader sr = new StreamReader(new FileStream(basePath + metadataPath, FileMode.Open)))
    {
         ...
    }
}

Cependant, lors de la construction du programme de déploiement HoloLens, je suis capable d'exécuter le code mais cela ne fonctionne pas. Aucune des ressources n'apparaît et lorsque j'examine la solution HoloLens Visual Studio (créée en sélectionnant build dans Unity), je ne vois même pas de dossier de ressources ou d'actifs. Je me demande si je fais quelque chose de mal ou s'il y a une façon spéciale de gérer ces ressources.

Aussi avec des fichiers image et son ...

foreach (string str in im)
{
      spriteList.Add(Resources.Load<Sprite>(str));
}

La chaîne "str" est valide; cela fonctionne parfaitement avec Unity. Cependant, encore une fois, il ne charge rien lors de l'exécution de HoloLens.

13
whycodingsohard

Vous ne pouvez pas lire le répertoire Resources avec la classe StreamReader ou File. Vous devez utiliser Resources.Load .

1 . Le chemin d'accès est relatif à n'importe quel dossier Resources dans le dossier Assets de votre projet.

2 . Ne pas ne pas inclure les noms d'extension de fichier tels que .txt, . png , . mp3 dans le paramètre path.

3 . Utilisez des barres obliques au lieu de barres obliques inverses lorsque vous avez un autre dossier dans le dossier Resources . les barres obliques inverses ne fonctionneront pas.

Fichiers texte :

TextAsset txtAsset = (TextAsset)Resources.Load("textfile", typeof(TextAsset));
string tileFile = txtAsset.text;

Formats pris en charge TextAsset :

txt . html . htm . xml . octets . json . csv .yaml. fnt

Fichiers audio :

AudioClip audio = Resources.Load("soundFile", typeof(AudioClip)) as AudioClip;

Fichiers image :

Texture2D texture = Resources.Load("textureFile", typeof(Texture2D)) as Texture2D;

Sprites - Single :

Image avec Type de texture réglé sur Sprite (2D et UI) et

Image avec Mode Sprite réglé sur Unique .

Sprite sprite = Resources.Load("spriteFile", typeof(Sprite)) as Sprite;

Sprites - Multiple :

Image avec Type de texture réglé sur Sprite (2D et UI) et

Image avec Mode Sprite réglé sur Multiple .

Sprite[] Sprite = Resources.LoadAll<Sprite>("spriteFile") as Sprite[];

Fichiers vidéo (Unity> = 5.6) :

VideoClip video = Resources.Load("videoFile", typeof(VideoClip)) as VideoClip;

GameObject Prefab :

GameObject prefab = Resources.Load("shipPrefab", typeof(GameObject)) as GameObject;

Maillage 3D (comme les fichiers FBX)

Mesh model = Resources.Load("yourModelFileName", typeof(Mesh)) as Mesh;

Maillage 3D (de GameObject Prefab)

MeshFilter modelFromGameObject = Resources.Load("yourGameObject", typeof(MeshFilter)) as MeshFilter;
Mesh loadedMesh = modelFromGameObject.sharedMesh; //Or   design.mesh

Modèle 3D (comme GameObject)

GameObject loadedObj = Resources.Load("yourGameObject") as GameObject;
//MeshFilter meshFilter = loadedObj.GetComponent<MeshFilter>();
//Mesh loadedMesh = meshFilter.sharedMesh;

GameObject object1 = Instantiate(loadedObj) as GameObject;

Accès aux fichiers dans un sous-dossier :

Par exemple, si vous avez un fichier shoot.mp3 qui se trouve dans un sous-dossier appelé " Sound " qui est placé dans le dossier Resources , vous utilisez la barre oblique:

AudioClip audio = Resources.Load("Sound/shoot", typeof(AudioClip)) as AudioClip;

Chargement asynchrone :

IEnumerator loadFromResourcesFolder()
{
    //Request data to be loaded
    ResourceRequest loadAsync = Resources.LoadAsync("shipPrefab", typeof(GameObject));

    //Wait till we are done loading
    while (!loadAsync.isDone)
    {
        Debug.Log("Load Progress: " + loadAsync.progress);
        yield return null;
    }

    //Get the loaded data
    GameObject prefab = loadAsync.asset as GameObject;
}

Pour utiliser : StartCoroutine(loadFromResourcesFolder());

26
Programmer