Menu
CoddyTech

Exiba a pontuação

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 2 de 60.

O text de um texto é uma string, então um número precisa se tornar texto antes de ser exibido. Concatená-lo a uma string com + faz isso: "Wood: " + wood resulta em Wood: 12 quando wood é 12, e wood.ToString() resulta em 12. O int sozinho não serve: woodText.text = wood; falha com CS0029, não é possível converter implicitamente o tipo 'int' para 'string'.

O número fica em um campo int, e o texto apenas o exibe. Um método reescreve o texto usando o valor do campo; toda alteração no número chama esse método, assim como Start(), para que o primeiro quadro mostre o valor real em vez do que foi digitado no Inspector. Aqui, a tecla Space corta 3 troncos:

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

O texto só muda quando wood muda. Reescrevê-lo em cada Update() teria a mesma aparência, mas criaria uma nova string 60 vezes por segundo sem necessidade. A ordem importa: chamar ShowWood() antes de wood += 3 exibiria a contagem antiga, ficando um pressionamento atrasada.

challenge icon

Desafio

Fácil

Mostre na tela as sementes e as árvores do jardineiro.

  1. Em Gardener.cs, escreva void ShowCounts() que define seedsText.text como "Seeds: " + seeds e treesText.text como "Trees: " + trees.
  2. Chame-o em um novo Start() e, no if do plantio, depois de trees++;.

Pressione “Jogar”: os textos mostram Seeds: 5 e Trees: 0 e mudam a cada muda. Depois, clique em “Verificar”.

Experimente você mesmo

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

    // Mostre Seeds: e Trees: nos dois textos desde o primeiro frame
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity