Mostra il punteggio
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 2 di 56.
Il text di un testo è una stringa, quindi un numero deve diventare testo prima di essere visualizzato. Concatenarlo a una stringa con + fa questo: "Wood: " + wood diventa Wood: 12 quando wood è 12, e wood.ToString() è 12. L'int da solo non è compatibile: woodText.text = wood; genera l'errore CS0029, Impossibile convertire implicitamente il tipo 'int' in 'string'.
Il numero è memorizzato in un campo int e il testo lo mostra soltanto. Un metodo riscrive il testo usando il valore del campo; ogni modifica al numero lo richiama, così come fa Start(), in modo che il primo frame mostri il valore effettivo invece di quello inserito nell'Inspector. Qui la barra spaziatrice taglia 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() sembrerebbe uguale, ma creerebbe una nuova stringa 60 volte al secondo senza motivo. L'ordine è importante: chiamare ShowWood() prima di wood += 3 mostrerebbe il conteggio precedente, rimanendo indietro di una pressione.
Sfida
FacileIl giardiniere pianta alberi. Le frecce lo fanno camminare e la barra spaziatrice pianta un alberello finché ci sono semi, come fa già Gardener.cs. Mostra i conteggi sullo schermo; nella scena sono collegati seedsText e treesText:
seedsTextmostra i semi rimasti, comeSeeds: 4, etreesTextgli alberi piantati, comeTrees: 1.- Entrambi sono corretti dal primo fotogramma e dopo ogni piantumazione. Nell'Inspector vengono assegnati al giardiniere 5 semi, anche se i testi nella scena dicono ancora
Seeds: 10eTrees: ?. - Scrivi un metodo che imposti entrambi i testi e chiamalo dove necessario.
Premi Play, pianta finché i semi non finiscono, poi premi Check.
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
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti 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: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input