[RESOLU][MY -AL] Ouvrir un fichier sans le "path" et en "Runtime"

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

[RESOLU][MY -AL] Ouvrir un fichier sans le "path" et en "Runtime"

Message par DevAmat » 15 Oct 2018 11:51

Salut, je bloque sur quelque chose.

Donc pour poser le contexte:
Je développe un module de localisation (traduction), et j'aimerai qu'il soit assez pratique. J'aimerai passer par des scriptables Object et y "drag and drop" mes fichiers langues (format xml). Jusque là pas de soucis. L'objectif est de ne pas a avoir à stocker un chemin d'accès.

Donc j'aimerai lire ces fichiers directement avec leur référence et non via leur "path". En mode éditeur il y a la fonction "AssetDatabase.GetAssetPath" à la limite qui me permet de récupérer ce "path" à la volé, mais en runtime je n'ai pas trouvé d'équivalent. De plus les fonctions pour ouvrir les fichier demande toujours le path en argument...

Sinon je peux me débrouiller pour détecter lorsque mon champs est modifié dans l'éditeur et à ce moment là faire un "AssetDatabase.GetAssetPath" et le stocker. Le soucis est que si je change l'emplacement de ce fichier dans le projet le chemin d'accès devient faux (peut on détecter dans un script un changement dans le projet?).

J'espère avoir été clair...
Avez vous des pistes?

Merci par avance!
Dernière édition par DevAmat le 15 Oct 2018 20:47, édité 1 fois.

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: [MY -AL] Ouvrir un fichier sans le "path" et en "Runtime"

Message par Liven » 15 Oct 2018 15:22

Je ne sais pas si ça t'aidera, mais perso je passe pas mal par le dossier où est installer le jeu, du coup ça donne ceci où que soit installer le jeu :

Code : Tout sélectionner

        
        if (File.Exists(Application.dataPath + "NomDuFichier"))
        {}
Le datapath est une variable interne qui donne automatiquement le répertoire data de ton jeu. Il y a sans doute d'autres répertoires accessible facilement comme ça, faut fouiller dans la doc ou l'autocomplétion de visual studio pour voir ce qu'on a sous la mains

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: [MY -AL] Ouvrir un fichier sans le "path" et en "Runtime"

Message par DevAmat » 15 Oct 2018 20:44

Oui merci, mais dans ce cas tu es toujours obligé de donner une string.
Je pense avoir trouvé ma solution. il y a une class qui convient à priori. Je peux l'utiliser en Build.
Je donne l'exemple:

Code : Tout sélectionner

using UnityEngine;
using System.IO;
using System.Xml;

public class LoaderXML: MonoBehaviour
{
    public TextAsset xlmFile;  // La référence de mon fichier langue

    void Start()
    {
        OpenXML(xlmFile);
    }

    void OpenXML(TextAsset file)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(new StringReader(file.text));  // La class magique

        // read xml
        foreach (XmlNode node in xmlDoc)
        {
            string root = node.Name;
            Debug.Log(root); // draw root element

            foreach (XmlElement element in node)
            {
                string el = element.Name;
                Debug.Log(el); // draw element
            }
        }
    }
}
Du coup avec ça, normalement je peux déplacer mes fichiers dans le projet sans devoir réassigner quoi que ce soit. Je dois encore tester plus cette class...

ps: ce code est temporaire...

Répondre

Revenir vers « (C#) CSharp »