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.
Wyzwanie
ŁatwyWyświetl na ekranie liczbę nasion i drzew ogrodnika.
- W pliku
Gardener.csnapiszvoid ShowCounts(), która ustawiaseedsText.textna"Seeds: " + seeds, atreesText.textna"Trees: " + trees. - Wywołaj ją w nowej metodzie
Start()oraz w instrukcji sadzeniaif, potrees++;.
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
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski 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 bankuPoćwicz samodzielnie: Edytor online Unity