J'ai un script simple pour compter un score pour le joueur, comment puis-je prendre cette valeur et l'afficher sur une partie sur scène?
Ceci est mon script de score: P>
public class scoreScript : MonoBehaviour {
public static int scoreValue = 0;
Text score;
// Use this for initialization
void Start () {
score = GetComponent<Text>();
}
// Update is called once per frame
void Update () {
score.text = "Score:" + scoreValue;
}
}
4 Réponses :
simple, appelez simplement "scorescript.scorevalue" dans n'importe quel script souhaité dans le jeu sur scène p>
Puis-je obtenir un exemple de comment l'appeler désolé
Lorsque vous chargez une nouvelle scène, le gamebject qui porte le "scorescript" est perdu. Afin de transférer le même jeu à une nouvelle scène (ce qui a du sens pour ne pas perdre vos informations que le script porte), vous devez utiliser la méthode "DonTdestroyonload".
Vous venez d'appeler la méthode de la méthode éveillée de votre monobehaviour, puis de votre gameObject (ainsi que les données de votre script) persisteront la nouvelle chargement de la scène.
Voici la documentation correspondante:
https://docs.unity3d.com/scriptreference/Object.dontdestroyonload.htmlled/a > et voici un échantillon de code: p>
En outre, l'utilisation d'une valeur statique pour la conservation du score facilite l'accès mondial, mais vous voudrez peut-être envisager l'utilisation d'événements pour mettre à jour votre valeur de score (c'est-à-dire lorsque quelque chose se passe un événement est soulevé et que le gestionnaire de score répond à cet événement en augmentant le score ) De cette façon, vous n'aurez pas non plus besoin de répéter le "score.text =" Score: "+ ScoreValue;" Dans la méthode de mise à jour
Vous l'avez déjà fait supposant que Vous n'avez pas besoin de créer une instance pour accéder à un membre statique, vous devez y accéder à l'aide d'un nom de classe ( Cependant, il n'est pas bon de mélanger le score global et un champ de texte pour l'afficher dans une seule classe, car vous ajoutez de nouvelles fonctionnalités au jeu, toutes les variables mondiales seront Soyez dans différentes classes et vous paierez de plus en plus d'attention tout en modifiant votre code. Pour éviter cela, vous pouvez utiliser une classe statique comme "noyau" où vous stockez toutes les variables globales. Pour la première fois, cela fera. P> Static public Code>, tout ce qui reste est d'écrire dans votre jeu sur le script de champ de texte sur scène: gamevertext < / code> est un texte code>. p> scorescript < / code> dans votre cas). p> DONTDestroyOnload code> fonctionne avec gameObject code> s, afin qu'ils ne détruiront pas quand une nouvelle scène est chargée. Si vous l'appelez dans votre script, votre score comptant GameObject restera, et ainsi un champ de texte, car il s'agit d'un composant de cet objet, et sera présent sur le jeu sur scène, alors ne le faites pas. P> < / p>
Je pense que j'ai ajouté le code correctement et il a compilé sans erreurs, mais cela ne semble rien faire de conseils?
Votre script pour le jeu Over L'étiquette doit être activé et être sur un jeu activé. Vous pouvez ajouter débog.log ("..."); code> en cela pour voir si la fonction a été appelée.
Je reçois une erreur disant que je n'ai pas appelé la variable score de script, comment puis-je l'instancier réellement?
Stockez-le dans puis reprise dans la nouvelle scène par: p> PlayerPrafs CODE> Pendant que vous quittez la scène actuelle, enregistrez-la dans PlayerPref comme: scoreValue = PlayerPrefs.Getint(" CurrentScore");
J'ai essayé cela mais je ne pense pas que cela fonctionnait, je ne peux pas trouver où je l'attacherais à mon texte de score
Si vous regardez de près, aucune des autres réponses ne répond vraiment à la question, mais celle-ci le fait!
Dupliqué possible de Unity - Passez les données entre scènes