Menu
CoddyTech

Wyświetlanie wyniku

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 2 z 60.

Tekst to ciąg znaków, więc liczba musi zostać zamieniona na tekst, zanim zostanie wyświetlona. Dołączenie jej do ciągu znaków za pomocą + to robi: "Wood: " + wood daje Wood: 12, gdy wood ma wartość 12, a wood.ToString() daje 12. Sama wartość int nie pasuje: woodText.text = wood; powoduje błąd CS0029, Nie można niejawnie przekonwertować typu 'int' na 'string'.

Liczba jest przechowywana w polu int, a tekst tylko ją wyświetla. Jedna metoda aktualizuje tekst na podstawie pola; każde zmienienie liczby ją wywołuje, podobnie jak Start(), dzięki czemu w pierwszej klatce wyświetlana jest rzeczywista wartość, a nie ta wpisana w Inspectorze. Tutaj spacja ścina 3 kłody:

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

Tekst zmienia się tylko wtedy, gdy zmienia się wood. Aktualizowanie go przy każdym wywołaniu Update() wyglądałoby tak samo, ale bez potrzeby tworzyłoby nowy ciąg znaków 60 razy na sekundę. Kolejność ma znaczenie: wywołanie ShowWood() przed wood += 3 wyświetliłoby poprzednią wartość, opóźnioną o jedno naciśnięcie.

challenge icon

Wyzwanie

Łatwy

Wyświetl na ekranie liczbę nasion i drzew ogrodnika.

  1. W pliku Gardener.cs napisz void ShowCounts(), która ustawia seedsText.text na "Seeds: " + seeds, a treesText.text na "Trees: " + trees.
  2. Wywołaj ją w nowej metodzie Start() oraz w instrukcji sadzenia if, po trees++;.

Naciśnij „Graj”: wyświetlone teksty to Seeds: 5 i Trees: 0, a ich wartości zmieniają się z każdą sadzonką. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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

    // Wyświetl Seeds: i Trees: w dwóch polach tekstowych już od pierwszej klatki
}

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity