[DB-AL] Rechercher une variable par son nom via un autre script. [RESOLU]

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
Maki-Sama
Messages : 36
Inscription : 12 Mars 2018 21:00

[DB-AL] Rechercher une variable par son nom via un autre script. [RESOLU]

Message par Maki-Sama » 07 Août 2019 18:49

Bonjour à tous :hello: ,

Alors voilà, pour plusieurs raisons j'essaye de rechercher une variable d'un script à l'autre par le biais de son nom.
Je m'explique :

J'ai une variable dans un script A (la variable étant un int ou un bool, peu importe. Cette dernière va se nommer MaVariable).

Et dans un autre script, je voudrais que cette variable soit trouvée.

(Je sais que c'est possible via la commande:

ScriptA.MaVariable = 5;

Si jamais cette variable étais un int et que je voulais la définir à 5. :cote: )

Cependant, j'aimerais que l'on puisse la trouver grâce à son nom et donc par le biais d'une autre variable string, que je pourrais modifier si l'envie m'en prenais.

Un truc du style :

ScriptA.(le string pouvant être modifié) = 5; (Bien sûr, j'ai essayé, sans surprise échec :/ )


Est-ce possible ou non ?
J'ai déjà fais plusieurs tests, mais la je sèche, aucun résultat. :triste1:

Merci par avance pour vos réponses. :amen:
Dernière édition par Maki-Sama le 17 Août 2019 10:42, édité 2 fois.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Alesk » 07 Août 2019 19:21

Non ce n'est pas possible comme ça, et pas non plus recommandé.

Dans quel contexte as-tu besoin de faire ça ?
Il y a certainement une alternative pour propre pour faire ce que tu veux.

Avatar de l’utilisateur
Maki-Sama
Messages : 36
Inscription : 12 Mars 2018 21:00

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Maki-Sama » 07 Août 2019 19:38

Pour plusieurs cas en faite.

Mais pour citer un exemple, ce serait utile pour déclencher une action.

Imaginons qu'un personnage exécute un trajet, il suit donc un itinéraire que je peux modifier à ma guise.
Une fois arrivé à la fin, il va modifier une variable d'un autre script qui va permettre à se dernier de continuer son programme.

Cependant, si je prends un autre personnage (toujours en restant sur le même exemple), je lui attribuerais un trajet différent. Pas de soucis, mon script de trajet me le permet. Car tout en gardant le même script, j'ai juste à modifier les coordonnées dans l'inspecteur. :super:

En revanche, si je veux qu'il déclenche une autre variable d'un autre script différent du premier cas, alors je serai obligé d'utiliser deux scripts au lieu d'un.

Seulement parce que une ligne change dans le programme. :pascontent2:

Après, n'y aurais t-il pas un moyen de glisser la variable désirée dans l'inspecteur ?
Un peu comme "public GameObject".

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Alesk » 07 Août 2019 20:26

Non, tu ne pourras pas "glisser" des propriétés de classes de cette façon.

Par contre, il serait bon de revoir la structure de ton code pour éviter que ce problème ne se pose.
Et là il faut attaque la POO.
Une vidéo sur le sujet (au pif, j'ai pas regardé) : https://www.youtube.com/watch?v=aOm_Lt5QRk8

Avatar de l’utilisateur
Maki-Sama
Messages : 36
Inscription : 12 Mars 2018 21:00

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Maki-Sama » 07 Août 2019 21:47

J'ai déjà utilisé des POO pour d'autres scripts et j'avoue que cela me donne quelques idées.

Je teste ça et je poste le résultat demain. :hello:

En espérant que cela fonctionne. ;)

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Alesk » 07 Août 2019 21:55

La POO c'est la vie !
Mangez-en plein !

Avatar de l’utilisateur
Maki-Sama
Messages : 36
Inscription : 12 Mars 2018 21:00

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Maki-Sama » 08 Août 2019 21:06

Re, comme prévu je poste le résultat de mes expériences.

Plutôt que de demander au script A de modifier une variable du script B, je me suis dit " pourquoi ne pas faire en sorte que le script A demande au script B de modifier sa propre variable".

Et magique, ça fonctionne. :super:

Voici les scripts que j'ai utilisé pour les tests.

Le premier script que j'ai nommé Test1 :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test1 : MonoBehaviour {

    public int Event = 0;
    public bool Completed = false;

    public void Refresh()
    {
        Event = 5;
        Completed = true;
    }
}
(juste histoire de modifier quelques variables)

Et le deuxième scripte nommé Test2 (oui je me suis pas foulé ::d ) :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test2 : MonoBehaviour {

    public GameObject Object;
    public MonoBehaviour Script;
    public string ScriptName;
    public string CouroutineName;

    void Start()
    {
        Script = Object.GetComponent(ScriptName) as MonoBehaviour;
    }

    public void Activ()
    {
        Script.StartCoroutine(CouroutineName);
    }

}
De cette manière, j'ai juste à glisser un objet dans l'instructeur et nommé le script et la couroutine qui m'intéressent avec l'aide des strings.


Et du coup, je pourrais très bien transformer cela avec les POO si jamais je veux que plusieurs Couroutines ou scripts soient ciblés.

Merci encore pour les astuces :hello: :amen:

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Alesk » 08 Août 2019 21:49

Alors oui mais non, t'as pas bien compris ce qu'était la POO (Programmation Orientée Objet)

Il va falloir creuser un peu plus ce sujet :gene:

Là l'idée c'est de profiter de l'extension de classes pour mutualiser les comportements communs.

par exemple tu créés une classe "être vivant" qui contient les méthodes "naitre" et "mourir"
puis tu peux faire une classe "animal" qui hérite de cette classe, avec les méthodes "deplacer" et "dormir"
et une troisième classe "plante" qui qui hérite également de "être vivant", avec les méthodes "pousser" et "fleurir"

pour les classes 2 et 3, tu auras en commun les actions de "naitre" et "mourir", tout en ayant également des spécificités à chacune.

Donc l'idée est de trouver le découpage hiérarchique de classes optimal te permettant d'appeler les méthodes dont tu à besoin de manière générique, sans avoir à bidouiller comme un petit cochon avec des noms de fonctions stockées dans des strings et appelées avec des coroutines.

voilà voilà ;)

Avatar de l’utilisateur
Maki-Sama
Messages : 36
Inscription : 12 Mars 2018 21:00

Re: [DB-AL] Rechercher une variable par son nom via un autre script.

Message par Maki-Sama » 16 Août 2019 17:24

Re, désolé pour le temps de retard, j'avais pas mal de truc à faire en ce moment :pascontent2:

Effectivement, j'ai pas trop utilisé la POO dans ces deux script, mais pour moi c'est pas trop grave car j'ai pu obtenir ce que je voulais sans trop l'utiliser (en grande partie, car cela m'a donné d'autre idées pour peaufiner ces scripts :) )

Après, la POO m'a était très utile pour d'autres anciens scripts comme les dialogues et les items de l'inventaire.
Et j'avoue que même après ça, je ne savais pas trop comment m'y prendre pour les modifs des variables via un autre script.

Pour ma pars, je suis plutôt satisfait. :)

Après t'inquiète, je suis en train de bossé sur un autre script. Et là pour le coup, POO obligatoire pour y parvenir ::d

Sur ce merci et à une prochaine :hello:

Répondre

Revenir vers « (C#) CSharp »