C# acceder a une variable d'un autre script en temps reel

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
construkid
Messages : 51
Inscription : 04 Juin 2015 17:57

C# acceder a une variable d'un autre script en temps reel

Message par construkid » 10 Jan 2016 15:55

BOnjour a tous,
mon probleme est que j'essaye de tester en continue dans un script une variable d'un autre script.

Code : Tout sélectionner

public class main : MonoBehaviour {

public bool TimeUp = false;

}
//ma variable.

Code : Tout sélectionner

public class engine : MonoBehaviour {

bool TimeUpEngine;

void Start () {

GameObject Maincamera = GameObject.Find ("MainCamera");
		main MainScript = Maincamera.GetComponent<main> ();
		TimeUpEngine = MainScript.TimeUp;

}
}
Les balises code !!

Je recupere ma variable est l'assigne a une autre (ici un bool).
Sauf que quand j'assigne la variable dans le void Update rien ne ce passe...

Si qqn pouvait m'aider il me manque qqc mais je sait pas quoi!!!

Merci!

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: C# acceder a une variable d'un autre script en temps reel

Message par ZJP » 10 Jan 2016 16:02

construkid a écrit :BOnjour a tous,
mon probleme est que j'essaye de tester en continue dans un script une variable d'un autre script.

Code : Tout sélectionner

public class main : MonoBehaviour {

public bool TimeUp = false;

}
//ma variable.

Code : Tout sélectionner

public class engine : MonoBehaviour {

bool TimeUpEngine;

void Start () {

GameObject Maincamera = GameObject.Find ("MainCamera");
		main MainScript = Maincamera.GetComponent<main> ();
		TimeUpEngine = MainScript.TimeUp;

}
}
Les balises code !!

Je recupere ma variable est l'assigne a une autre (ici un bool).
Sauf que quand j'assigne la variable dans le void Update rien ne ce passe...

Si qqn pouvait m'aider il me manque qqc mais je sait pas quoi!!!

Merci!
"MainScript " doit être déclarée en DEHORS de la fonction "Start()". Du coup, j'ai aussi un doute pour la déclaration de "Maincamera"

construkid
Messages : 51
Inscription : 04 Juin 2015 17:57

Re: C# acceder a une variable d'un autre script en temps reel

Message par construkid » 10 Jan 2016 16:07

D'accord mais ou? dans la fonction update? dans aucune fonction? j'ai essayé les deux j'ai une erreur qui me dit que Main Camera n'existe pas :(

construkid
Messages : 51
Inscription : 04 Juin 2015 17:57

Re: C# acceder a une variable d'un autre script en temps reel

Message par construkid » 10 Jan 2016 16:10

Bon tampis j'ai encore enormement de problemes a cause de ça je vais trouver un autre myen merci quand meme!

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

Re: C# acceder a une variable d'un autre script en temps reel

Message par Max » 10 Jan 2016 16:14

Comme la laissé entendre JP, il te faut appréhender le concept de base des variables globales et des variables locales.
Si tu définit une variable au sein d'une fonction, elle sera locale. Sa porté n'ira donc pas au delà de la fonction où elle est déclaré. Dans ton cas, elle l'est dans Start, donc en dehors, elle n'existe pas (si je puis dire).
Si tu veux qu'elle soit globale, alors il te faut la déclarer en dehors, généralement avant les déclarations de méthodes/fonctions.

Par exemple:

Code : Tout sélectionner

public class engine : MonoBehaviour {

bool TimeUpEngine;
main MainScript;

void Start () {

GameObject Maincamera = GameObject.Find ("MainCamera");
      MainScript = Maincamera.GetComponent<main> ();
      TimeUpEngine = MainScript.TimeUp;

}
}
Sinon, sur la forme, on évite les majuscules pour les déclaration de variables (dans ton cas MainScript), on les réserve pour les noms de scripts, de fonctions, méthodes (entre autre).
Il serait plus 'convenable' d'écrire 'Main mainscript;', à la limite 'Main mainScript;' (bien que la encore, Main est considéré comme pouvant être un mot clé, mais ça, c'est une autre histoire )
Bref, acquérir les bases en matière de prog t'épargnerais tous ces petit soucis ;)
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

construkid
Messages : 51
Inscription : 04 Juin 2015 17:57

Re: C# acceder a une variable d'un autre script en temps reel

Message par construkid » 10 Jan 2016 16:17

a d'accord merci beaucoup j'essaye ça tout de suite j'ai pas de tres bonne bases malheuresement!

construkid
Messages : 51
Inscription : 04 Juin 2015 17:57

Re: C# acceder a une variable d'un autre script en temps reel

Message par construkid » 10 Jan 2016 16:24

c'est bon alors j'ai plus derreur sur ça.

Mais je fais un jeu ou des cubes appraissent avec ce script, je ne peut donc pas assigner la variable dans la fonction start mais dans la fonction update:

Code : Tout sélectionner

void Update () {

		Maincamera = GameObject.Find ("MainCamera");
		MainScript = Maincamera.GetComponent<main> ();

		TimeUpEngine = MainScript.TimeUp;
		}
		
		
mes variables sont declarées au dessus mais maintenant j'ai l'erreur :

NullReferenceException: Object reference not set to an instance of an object
engine.Update () (at Assets/Scripts/engine.cs:35) a chaque fois qu'un cube apparait

La ligne 35 est la ligne avec MainScript...

Merci encore pour la reponse!

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

Re: C# acceder a une variable d'un autre script en temps reel

Message par Max » 10 Jan 2016 16:31

met le script en entier, c'est toujours mieux pour comprendre.
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

construkid
Messages : 51
Inscription : 04 Juin 2015 17:57

Re: C# acceder a une variable d'un autre script en temps reel

Message par construkid » 10 Jan 2016 16:38

Ok mais attention cest le nawak complet dedans :

Le script qui fait bouger le cube :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class engine : MonoBehaviour {



	public GameObject cube1;

	float posXcube1;
	float posYcube1;

	float RandomXY;
	float RandomXYmoinsplus;

	float TimeJeu = 0;
	float Timesec = 1;

	bool TimeUpEngine;
	GameObject Maincamera;
	main MainScript;

	// Use this for initialization
	void Start () {

		posYcube1 = cube1.transform.position.y;
		posXcube1 = cube1.transform.position.x;
	
	}
	
	// Update is called once per frame
	void Update () {

		Maincamera = GameObject.Find ("MainCamera");
		MainScript = Maincamera.GetComponent<main> ();

		TimeUpEngine = MainScript.TimeUp;

		// Calcul du deplacement aleas:

		TimeJeu += Time.deltaTime;

		if (Timesec < TimeJeu) {

			RandomXY = Random.Range (1, 3);
			RandomXYmoinsplus = Random.Range (-1, 2);

			// égale à X :
			if (RandomXY == 1) {

				posXcube1 += RandomXYmoinsplus;

				//LIMITE:
				if (posXcube1 < 50 && posXcube1 > -50 && posYcube1 < 50 && posYcube1 > -50){

					
					if (TimeUpEngine == false && posXcube1 > -1){

						
						posXcube1 -= RandomXYmoinsplus;

					}else{

					cube1.transform.position = new Vector3 (posXcube1, posYcube1, 0.48F);

					}
					

				}else{
				
				posXcube1 -= RandomXYmoinsplus;

			}

			// égale à Y:
			} else if (RandomXY == 2) {

				posYcube1 = posYcube1 + RandomXYmoinsplus;

				//LIMITE:
				if (posYcube1 < 50 && posYcube1 > -50 && posXcube1 < 50 && posXcube1 > -50){

					cube1.transform.position = new Vector3 (posXcube1, posYcube1,0.48F);

				}else {

					posYcube1 = posYcube1 - RandomXYmoinsplus;
				}
			}
			Timesec ++;
		}

	
	}
}
voila donc en gros je deplace un cube au pif, les parties test sont si le cube atteint les bord de la map et la partie qui arche pas cest une separation qui s'ouvre au bout de trentes sec...

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

Re: C# acceder a une variable d'un autre script en temps reel

Message par Max » 10 Jan 2016 16:47

Pour l'erreur ligne 35, je dirais que l'objet nommé 'MainCamera' n'est pas trouvé par ton GameObject.Find (accessoirement le genre de truc à éviter en Update, mais bon, chaque étape l'une après l'autre)
construkid a écrit :voila donc en gros je deplace un cube au pif, les parties test sont si le cube atteint les bord de la map et la partie qui arche pas cest une separation qui s'ouvre au bout de trentes sec...
Là j'ai rien compris.
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

Répondre

Revenir vers « (C#) CSharp »