IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

Accéder à une variable depuis n'importe quel scène


Sujet :

Unity

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2016
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Septembre 2016
    Messages : 52
    Points : 38
    Points
    38
    Par défaut Accéder à une variable depuis n'importe quel scène
    Bonsoir,

    Je développe un jeu actuellement et j'ai cru comprendre qu'il n'y a actuellement pas de solutions pour accéder à une variable se trouvant dasn un script attaché à un objet A se trouvant dans la scène A à partir de la scène B. Est-ce que vous avez tous ce problème aussi ?

    Si je veut créer une scène A où le joueur choisit ses configurations de jeu, et que la scène B a besoin de connaitre ces configurations en question, j'utilise une variable static, vous aussi vous devez procéder comme ça ?

    Dans ce que j'ai trouvé, les techniques du "BuildScene", "SceneByName",.... Ne reconnaissent pas ma scène B, seulement la scène A est reconnue et je n'ai pas l'air d'être le seul à avoir ce problème.

    Comment faire sinon ? Est-ce que ce n'est pas grave de fournir les paramètres de mon jeu dans des variables static pour y avoir accès depuis n'importe quel scène ?

    Merci pour votre aide

  2. #2
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Bonjour,

    Il existe de multiples façons pour résoudre ce genre de soucis. Voici quelques pistes (liste non exhaustive).
    Première solution simple, passer par les PlayerPrefs. Pas forcément la plus conseillé, mais si tu n'as que quelques éléments à passer entre chaque scène, c'est une solution simple et aisé de mise en œuvre.
    Après, seconde approche, tu peux regarder du coté des ScriptableObject, qui sont très bien pour ce genre de chose (entre autre).
    Autre solution, tu fais un Manager, sur un GO non destructible, et que tu vas rendre persistant de scène en scène (DontDestroyOnLoad).
    Toujours autre solution, passer par le SceneManagement. Aujourd’hui Unity te permet de gérer plusieurs scènes en même temps, c'est à dire que tu peux avoir ta scène de base permanente, avec par exemple ton Player, la partie GUI, les Managers, bref toutes les briques de base de ton jeu, et en suite charger/décharger les scènes "levels" selon les besoins (exemple avec le petit screen).


    Bref, les solutions ne manquent pas

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2016
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Septembre 2016
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Merci pour tes réponses, je pense que du coup, la technique dépend de la structure du programme non ? Dans mon cas j'essaie de bien séparer les méthodes en assignant un script propre à tel ou tel GO pour éviter un maximum de "dépendances". Ca me semble être une bonne façon de faire pour empiler les briques, mais du coup j'évite de jouer avec les managers sauf pour la gestion des menus (GUI) car j'ai peur que ça mélange un peut tous.

    Du coup j'ai par exemple un GO "bot", benh je lui attache un script "ScriptDeplacementAutomatique" + "ScriptParler" + "ScriptPnjProperties", etc... Et si je souhaite que ce robot en question sache qu'il est "portugais" ou "espagnol" selon le choix que je fait dans le menu de départ, benh j'ai un script avec des propriétés statics. Est-ce une bonne façon de faire malgré tout ? Étant débutant sur Unity, j'essaie de respecter un maximum de conventions mais comme c'est "selon l'architecture", je m'y perd un peu.

  4. #4
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Bonsoir,

    Au vue de ce que décris, je pense que tu devrais regarder du coté des ScriptableObjects
    Je te file le lien vers un billet du blog d'Alex: technique pour structurer son projet et gagner en flexibilité.

  5. #5
    Membre habitué Avatar de EliXirr
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Points : 176
    Points
    176
    Par défaut
    Tu peux aussi créer un objet static dans lequel tu stoques tes variables. Tu pourras alors acceder au variables que tu veux partout, dans toutes tes scène, dans tous tes scripts. J'utilise frequement cette technique dans le logiciel que je developpe, ça marche super bien.

    Autre solution : tu peux aussi faire en sorte d'avoir un objet "Immortel" c'est a dire qu'il ne sera pas detruit lorsque tu changes de scene. Tu peux alors y acceder par tag ou par name.

  6. #6
    Futur Membre du Club Avatar de BenoitFreslon
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Le Singleton
    De mon côté j'utilise depuis toujours des Singleton qui font exactement ce que tu cherches.
    Objet immortel et accessible depuis n'importe où.

    En plus de pouvoir accéder à des variables ou des constantes, le Singleton permet d'exécuter des méthodes.

    http://wiki.unity3d.com/index.php/Singleton

    Bon dev !
    -Benoit.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2016
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Septembre 2016
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Merci pour vos réponses, je vais aller voir du coté des singleton et du ScriptableObject(). Merci d'avoir pris le temps de me répondre !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2010, 14h34
  2. Réponses: 11
    Dernier message: 10/05/2010, 09h40
  3. Réponses: 3
    Dernier message: 24/06/2009, 17h59
  4. Réponses: 1
    Dernier message: 31/08/2008, 19h04
  5. Réponses: 15
    Dernier message: 30/04/2008, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo