bonjour,
j'ai fini de faire le tuto Space Shooter, je voudrais savoir comment on fait pour accéder à la propriété score qui est défini en private dans GameController, depuis par exemple PlayerController. Merci pour votre aide.
Refschool
Tuto Space Shooter Comment accéder au score depuis un autre script?
Re: Tuto Space Shooter Comment accéder au score depuis un autre script?
Il faut d'abord que tu passe ta variable score en public dans GameController, ensuite dans PlayerController :
Pour l'histoire des majuscules, c'est juste pour différencier le "type" de variable et le "nom" de la variable. Commencer le nom par une minuscule est quelque chose que tout le monde fait, mais libre à toi de procéder différemment.
Sinon pour être complet, au cas ou tu ne puisse pas glisser l'objet dans le champs (car il n'est pas encore créé dès le début et serra instancié en cours de partie) :
Bon mon exemple est un peu bancale car si l'objet cherché n'existe pas en début de partie, tu ne risque pas de le trouve lors du start, mais c'est histoire de montrer le code pour chercher un objet et un composant qu'il contient.
Attention : les fonctions "Find" et "GetComponent" sont très gourmandes donc à utiliser le moins possible (donc à réserver aux start ou awake autant que possible).
Code : Tout sélectionner
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField] private GameController gameController; // attention aux majuscules
// dans l'inspector, faire glisser l'objet contenant GameController dans ce champs (même si c'est lui même)
private float scoreRecupere;
void Start ()
{
scoreRecupere = gameController.score;
}
}
Sinon pour être complet, au cas ou tu ne puisse pas glisser l'objet dans le champs (car il n'est pas encore créé dès le début et serra instancié en cours de partie) :
Code : Tout sélectionner
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private GameObject objetContenantGameController;
private GameController gameController;
private float scoreRecupere;
void Start ()
{
objetContenantGameController = GameObject.Find("NomDeObjetContenantGameController");
gameController = objetContenantGameController.GetComponent<GameController>();
scoreRecupere = gameController.score;
}
}
Bon mon exemple est un peu bancale car si l'objet cherché n'existe pas en début de partie, tu ne risque pas de le trouve lors du start, mais c'est histoire de montrer le code pour chercher un objet et un composant qu'il contient.
Attention : les fonctions "Find" et "GetComponent" sont très gourmandes donc à utiliser le moins possible (donc à réserver aux start ou awake autant que possible).
- E3DStef
- Administrateur
- Messages : 1646
- Inscription : 14 Juil 2013 18:30
- Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/
Re: Tuto Space Shooter Comment accéder au score depuis un autre script?
Tu as les variables globales comme expliqué un peu plus haut avec les serializedfields, tu as toujours la solution du fichier txt à la racine ou encore DONTDESTROY ^^
Essaye la solution précédente et dis nous si ok ou pas.
A+
Stef
Essaye la solution précédente et dis nous si ok ou pas.
A+
Stef
Le Savoir n'est Précieux que s'il est Partagé
Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com
Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com
Re: Tuto Space Shooter Comment accéder au score depuis un autre script?
bonsoir, merci pour ta solution.
Moi j'avais tenté de mettre en public static pour pouvoir y accéder.
J'ai remarqué que je pouvais directement y accéder de cette façon :
Je vais essayer la solution proposée. En fait tout ce qui est "Serialized" apparait dans l'éditeur n'est ce pas? et de fait rend l'attribut global?
Moi j'avais tenté de mettre en public static pour pouvoir y accéder.
J'ai remarqué que je pouvais directement y accéder de cette façon :
int score = GameController.score;Je ne sais pas si cette façon de faire est "propre", (j'y tiens beaucoup à faire du code propre)
Je vais essayer la solution proposée. En fait tout ce qui est "Serialized" apparait dans l'éditeur n'est ce pas? et de fait rend l'attribut global?
Dernière édition par refschool le 21 Oct 2018 20:53, édité 1 fois.
Re: Tuto Space Shooter Comment accéder au score depuis un autre script?
Pour les statics, le soucis c'est qu'à ma connaissance on ne peut y avoir acces dans l'inspector, du coup, au tord ou à raison, je n'ai pas trop l'habitude de les utiliser.refschool a écrit : ↑20 Oct 2018 21:06bonsoir, merci pour ta solution.
Moi j'avais tenté de mettre en public static pour pouvoir y accéder.
J'ai remarqué que je pouvais directement y accéder de cette façon :int score = GameController.score;Je ne sais pas si cette façon de faire est "propre", (j'y tiens beaucoup à faire du code propre)
Je vis essayer la solution proposée. EN fait tout ce qui est "Serialized" apparit dans l'éditeur n'et ce pas? et de fait rend l'attribut global?
Les exemples que je donne sont surtout fonctionnel, il n'ont pas prétention à être super propre (un peut opti quand même) j'avoue que je suis vite perdu quand on rentre dans les subtilités du langage orienté objet.
[serialised] rend effectivement les variables visible dans l'inspector sans pour autant les rendre public (ces variables restent privé donc interne au script). C'est un bon moyen de les distingué des variables publiques qui elles aussi apparaissent dans l'inspector, mais en plus sont accessible depuis d'autres scripts.
C'est une bonne habitude de distinguer les deux (contrairement à ce que l'on voit dans beaucoup de tutos) pour débugguer, faire la chasse aux variables inutiles et avoir un code propre