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.
Wyzwanie
ŁatwyOgrodnik 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:
seedsTextpokazuje pozostałe nasiona, np.Seeds: 4, atreesTextposadzone 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: 10iTrees: ?. - 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
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku