Mostra il punteggio
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 2 di 60.
Il text di un testo è una stringa, quindi un numero deve diventare testo prima di essere mostrato. Concatenarlo a una stringa con + fa proprio questo: "Wood: " + wood diventa Wood: 12 quando wood vale 12, e wood.ToString() restituisce 12. L’int da solo non è compatibile: woodText.text = wood; genera l’errore CS0029, Cannot implicitly convert type 'int' to 'string'.
Il numero è memorizzato in un campo int, mentre il testo si limita a mostrarlo. Un metodo riscrive il testo usando il valore del campo; ogni modifica al numero richiama il metodo, così come fa Start(), in modo che il primo fotogramma mostri il valore effettivo invece di quello inserito nell’Inspector. Qui, premendo Spazio, si tagliano 3 tronchi:
public TMP_Text woodText;
private int wood;
void Start()
{
ShowWood();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
wood += 3;
ShowWood();
}
}
void ShowWood()
{
woodText.text = "Wood: " + wood;
}Il testo cambia solo quando cambia wood. Riscriverlo a ogni Update() avrebbe lo stesso risultato visivo, ma creerebbe inutilmente una nuova stringa 60 volte al secondo. L’ordine è importante: chiamare ShowWood() prima di wood += 3 mostrerebbe il conteggio precedente, rimanendo indietro di una pressione.
Sfida
FacileMostra sullo schermo i semi e gli alberi del giardiniere.
- In
Gardener.cs, scrivivoid ShowCounts()che impostaseedsText.textsu"Seeds: " + seedsetreesText.textsu"Trees: " + trees. - Chiamala in un nuovo
Start()e, nell’ifdella semina, dopotrees++;.
Premi «Gioca»: i testi mostrano Seeds: 5 e Trees: 0 e cambiano con ogni alberello. Poi premi «Verifica».
Provalo tu
using UnityEngine;
using TMPro;
public class Gardener : MonoBehaviour
{
public float speed = 4f;
public int seeds = 10;
public GameObject saplingPrefab;
public TMP_Text seedsText;
public TMP_Text treesText;
private int trees;
void Update()
{
float move = Input.GetAxisRaw("Horizontal");
transform.Translate(move * speed * Time.deltaTime, 0f, 0f);
if (Input.GetKeyDown(KeyCode.Space) && seeds > 0)
{
Vector3 spot = new Vector3(transform.position.x, 0.5f, 1.5f);
Instantiate(saplingPrefab, spot, Quaternion.identity);
seeds--;
trees++;
}
}
// Mostra Seeds: e Trees: nei due testi, fin dal primo frame
}
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity