Menu
CoddyTech

Wyświetlanie wyniku

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

Właściwość text tekstu jest ciągiem znaków, więc liczba musi stać się tekstem, zanim zostanie wyświetlona. Połączenie jej z ciągiem znaków za pomocą + robi to: "Wood: " + wood daje Wood: 12, gdy wood ma wartość 12, a wood.ToString() daje 12. Sama wartość typu int nie pasuje: woodText.text = wood; powoduje błąd CS0029: Cannot implicitly convert type 'int' to 'string'.

Liczba jest przechowywana w polu typu int, a tekst tylko ją wyświetla. Jedna metoda ustawia tekst na podstawie pola; wywołuje ją każda zmiana liczby, a także Start(), dzięki czemu w pierwszej klatce wyświetlana jest rzeczywista wartość, a nie ta wpisana w Inspectorze. W tym przykładzie naciśnięcie spacji ś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. Ustawianie go ponownie w każdym 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ść — po naciśnięciu przycisku licznik byłby opóźniony o jedno naciśnięcie.

challenge icon

Wyzwanie

Łatwy

Ogrodnik sadzi drzewa. Strzałkami poruszasz nim, a klawisz Space sadzi sadzonkę, dopóki nie skończą się nasiona, tak jak robi to już Gardener.cs. Wyświetl liczniki na ekranie; w scenie połączono seedsText i treesText:

  • seedsText pokazuje pozostałe nasiona, np. Seeds: 4, a treesText posadzone drzewa, np. Trees: 1.
  • Oba liczniki wyświetlają poprawne wartości od pierwszej klatki i po każdym sadzeniu. W Inspectorze ogrodnik ma 5 nasion, chociaż teksty w scenie nadal pokazują Seeds: 10 i Trees: ?.
  • Napisz jedną metodę, która ustawia oba teksty, i wywołuj ją zawsze, gdy jest potrzebna.

Naciśnij Play, sadź, aż skończą się nasiona, a następnie naciśnij Check.

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 obu polach tekstowych już od pierwszej klatki
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier