[DB-AL] Récupérer une variable d'un autre script

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
Ajioze
Messages : 6
Inscription : 14 Nov 2018 23:08

[DB-AL] Récupérer une variable d'un autre script

Message par Ajioze » 11 Nov 2019 14:39

Bonjour à tous,

Je sais que ce sujet a déjà été traité plusieurs fois, malheureusement aucune des solutions trouvées sur le forum ne fonctionne dans mon cas, et je ne comprends pas pourquoi.
J'aimerai donc récupérer l'état d'une variable bool nommée "contact" qui se trouve dans un script "frog" attaché a un gameobject "Frog", et l'utiliser dans le script "Vue" attaché au gameobject "Camera".
Les scripts sont les suivants :

Code : Tout sélectionner

using UnityEngine;

public class frog : MonoBehaviour {

public bool contact;
	
    private void OnCollisionEnter(Collision collision)
    {
        contact = true;
    }

    private void OnCollisionExit(Collision collision)
    {
        contact = false;
    }
    }

Code : Tout sélectionner

using UnityEngine;

public class Vue : MonoBehaviour {


void Update () {
if (GameObject.Find("Frog").GetComponent("frog").contact == true)
                {
                    Debug.Log("Il y a eu contact");
                }
}
Cette méthode ne fonctionne pas avec le message d'erreur " 'Component' ne contient pas de définition pour "contact".."

J'ai donc essayé de créer une fonction dans le premier script, qui retournais ma variable contact, puis dans le second script de récupéré la fonction mais j'obtiens le meme message.


Qu'en pensez vous ?

Si vous avez une autre solution d'ailleurs que de passer par un script, le but générale est de detecter une collision de mon objet "Frog" depuis le script "Vue".


Merci du temps que vous m'aurez accordé :]

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-RS] Récupérer une variable d'un autre script

Message par Max » 11 Nov 2019 15:03

Bonjour,
Ajioze a écrit :
11 Nov 2019 14:39
Cette méthode ne fonctionne pas avec le message d'erreur " 'Component' ne contient pas de définition pour "contact".."
normal, dans ton cas il faut éviter la référence à un composant par string.
Donc soit tu écris:

Code : Tout sélectionner

GameObject.Find("Frog").GetComponent<frog>().contact == true
ou éventuellement

Code : Tout sélectionner

frog fr = GameObject.Find("Frog").GetComponent("frog") as frog;
if(fr.contact == true) 
....
ne pas hésiter à consulter la doc en cas de problème: GameObject.GetComponent.

PS: évite les Finds dans les Updates, préfère la mise en cache.
Idem pour le nommage des classes, la première lettre devrait être une majuscule (les minuscules sont surtout dévouées aux données). En terme de lisibilité pour ceux qui ont l'habitude, c'est plus clair. Donc par exemple Frog au lieu de frog.
;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Ajioze
Messages : 6
Inscription : 14 Nov 2018 23:08

Re: [DB-RS] Récupérer une variable d'un autre script

Message par Ajioze » 11 Nov 2019 15:36

Merci beaucoup pour ta réponse ! Je prends en note tes conseils ;)

Malheureusement j'ai toujours une erreur, cette fois-ci dans la console de unity on me dit :

"Assets/Scripts/Vue.cs(47,24): error CS1061: Type `frog' does not contain a definition for `contact' and no extension method `contact' of type `frog' could be found. Are you missing an assembly reference?"

Pourtant "contact" est bien en public, donc pourquoi ne le trouve-t-il pas ?

Merci d'avance.

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-RS] Récupérer une variable d'un autre script

Message par Max » 11 Nov 2019 15:44

reposte ton code Vue.cs modifié et complet, pour voir.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Ajioze
Messages : 6
Inscription : 14 Nov 2018 23:08

Re: [DB-RS] Récupérer une variable d'un autre script

Message par Ajioze » 11 Nov 2019 16:07

Code : Tout sélectionner

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

public class Vue : MonoBehaviour {

    frog fr = GameObject.Find("Frog").GetComponent("frog") as frog;
    
    void Update () {
    
    if (fr.contact == true)
                {
                    Debug.Log("Il y a eu contact");
                }
     }
 }
 

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-RS] Récupérer une variable d'un autre script

Message par Max » 11 Nov 2019 16:20

Tu ne peux pas écrire comme cela ta ligne frog fr = GameObject.Find("Frog").GetComponent("frog") as frog;.
L'emploi de méthode comme GameObject.Find doit se faire au sein de fonctions/méthodes.
Tu définis dans un premier temps tes données, et en suite tu en passes par une initialisation dans une fonction type Start ou Awake.
Donc genre:

Code : Tout sélectionner

private frog fr;

void Start()
{
  fr = GameObject.Find("Frog").GetComponent("frog") as frog;
}
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Ajioze
Messages : 6
Inscription : 14 Nov 2018 23:08

Re: [DB-AL] Récupérer une variable d'un autre script

Message par Ajioze » 11 Nov 2019 16:35

Ok je comprends ! et ca marche !! :amen:

Merci beaucoup, jvais enfin pouvoir continuer. Je reviendrai si je bloque a nouveau ;)

Répondre

Revenir vers « (C#) CSharp »