Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Mostra sullo schermo i semi e gli alberi del giardiniere.

  1. In Gardener.cs, scrivi void ShowCounts() che imposta seedsText.text su "Seeds: " + seeds e treesText.text su "Trees: " + trees.
  2. Chiamala in un nuovo Start() e, nell’if della semina, dopo trees++;.

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

Esercitati da solo: Playground Unity