Menu
CoddyTech

Exiba a pontuação

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 2 de 56.

O text de um texto é uma string, então um número precisa se tornar texto antes de ser exibido. Juntá-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' em 'string'.

O número fica em um campo int, e o texto apenas o exibe. Um método reescreve o texto a partir do campo; toda alteração no número chama esse método, assim como Start(), para que o primeiro frame 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 uma pressionada atrasada.

challenge icon

Desafio

Fácil

O jardineiro planta árvores. As setas o movimentam, e a tecla Espaço planta uma muda enquanto ainda houver sementes, como Gardener.cs já faz. Mostre as contagens na tela; a cena vincula seedsText e treesText:

  • seedsText mostra quantas sementes restam, como em Seeds: 4, e treesText mostra quantas árvores foram plantadas, como em Trees: 1.
  • Ambos estão corretos desde o primeiro quadro e após cada plantio. O Inspector dá 5 sementes ao jardineiro, embora os textos na cena ainda mostrem Seeds: 10 e Trees: ?.
  • Escreva um método que defina os dois textos e chame-o sempre que necessário.

Pressione Jogar, plante até as sementes acabarem e, em seguida, pressione 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 quadro
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Criando jogos de verdade