Menu
CoddyTech

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.

challenge icon

Sfida

Facile

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

  • seedsText mostra i semi rimasti, come Seeds: 4, e treesText gli alberi piantati, come Trees: 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: 10 e Trees: ?.
  • 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
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi