0
votes

Comment puis-je conserver mon score de joueur à une nouvelle scène?

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;
 }

}


1 commentaires

4 Réponses :


1
votes

simple, appelez simplement "scorescript.scorevalue" dans n'importe quel script souhaité dans le jeu sur scène


1 commentaires

Puis-je obtenir un exemple de comment l'appeler désolé



-2
votes

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: xxx


1 commentaires

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



0
votes

Vous l'avez déjà fait Static public , tout ce qui reste est d'écrire dans votre jeu sur le script de champ de texte sur scène: xxx

supposant que gamevertext < / code> est un texte .

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 ( scorescript < / code> dans votre cas).

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.

DONTDestroyOnload fonctionne avec gameObject 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>


3 commentaires

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 ("..."); 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?



1
votes

Stockez-le dans PlayerPrafs CODE> Pendant que vous quittez la scène actuelle, enregistrez-la dans PlayerPref comme: xxx pré>

puis reprise dans la nouvelle scène par: p>

scoreValue = PlayerPrefs.Getint(" CurrentScore");


2 commentaires

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!