[Résolu] Manipuler des objets static

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
polmpolm123
Messages : 30
Inscription : 23 Déc 2016 15:15

[Résolu] Manipuler des objets static

Message par polmpolm123 » 01 Juin 2017 14:28

Bonjour,

Je suis entrain de tester le mot-clés "static". J'ai deux scripts Test et AfficheTest, AfficheTest affiche dans la console la valeur de la variable t du script Test.

Code : Tout sélectionner

public class Test : MonoBehaviour
 {

    public static Test test;
    public string t;
    
    void Awake() { t = "test" }
    
}

Code : Tout sélectionner

public class AfficheStatic : MonoBehaviour {

	// Use this for initialization
	void Start ()
    {
        Debug.Log(Test.test.t);
		
	}

}
J'obtiens cette erreur :

Code : Tout sélectionner

NullReferenceException: Object reference not set to an instance of an object
AfficheStatic.Start () (at Assets/Script/AfficheStatic.cs:10)
Dernière édition par polmpolm123 le 01 Juin 2017 18:09, édité 1 fois.

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] Manipuler des objets static

Message par simonj » 01 Juin 2017 15:13

Salut,

Si tu veux strictement résoudre ton problème, c'est juste qu'ici ta variable static c'est pas assignée.

Code : Tout sélectionner

public static Test test; // Il faut l'assigner. Sinon elle est vide !
En gros ça donnerais ça :

Code : Tout sélectionner

public class Test : MonoBehaviour
 {

    public static Test test;
    public string t;
    
    void Awake() 
    {
    	test = this;
    	 t = "test"
    }
}
Après c'est peut être pas la meilleure façon de faire ça... Cette façon de travailler sert surtout à avoir des données réglables dans l'Inspecteur mais accessible de n'importe où dans le code.
Si ne veux pas que ta variable "t" soit modifiée dans l'inspecteur et que tu veux juste faire des calculs et avoir des données accessibles n'importe où dans le code, tu peux mettre directement ta variable "t" en static. Ce qui te permet de faire :

Code : Tout sélectionner

public class Test : MonoBehaviour
 {
    public static string t = "Default";
    
    void Awake() 
    {
    	 t = "test"
    }
}

public class AfficheStatic : MonoBehaviour {

   // Use this for initialization
   void Start ()
    {
        Debug.Log(Test.t); // Display : test
   }

}

polmpolm123
Messages : 30
Inscription : 23 Déc 2016 15:15

Re: [DB-AL] Manipuler des objets static

Message par polmpolm123 » 01 Juin 2017 18:09

Merci de votre aide.

Répondre

Revenir vers « (C#) CSharp »