Menu
CoddyTech

Punktestand anzeigen

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 2 von 60.

Der text eines Textes ist eine Zeichenfolge, daher muss eine Zahl zu Text werden, bevor sie angezeigt wird. Wenn du sie mit + an eine Zeichenfolge anhängst, geschieht genau das: "Wood: " + wood ergibt Wood: 12, wenn wood den Wert 12 hat, und wood.ToString() ergibt 12. Die int-Zahl allein passt nicht: woodText.text = wood; schlägt mit CS0029 fehl: Cannot implicitly convert type 'int' to 'string'.

Die Zahl befindet sich in einem int-Feld, und der Text zeigt sie nur an. Eine Methode schreibt den Text anhand des Felds neu; jede Änderung der Zahl ruft sie auf, ebenso wie Start(), damit im ersten Frame der tatsächliche Wert angezeigt wird statt des im Inspector eingegebenen Werts. Hier hackst du mit der Leertaste 3 Holzscheite:

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

Der Text ändert sich nur, wenn sich wood ändert. Würdest du ihn bei jedem Update() neu schreiben, sähe es genauso aus, aber es würde 60-mal pro Sekunde grundlos eine neue Zeichenfolge erstellt. Die Reihenfolge ist wichtig: Würde ShowWood() vor wood += 3 aufgerufen, würde der alte Zählerstand angezeigt – einen Tastendruck hinterher.

challenge icon

Aufgabe

Einfach

Zeige die Samen und Bäume des Gärtners auf dem Bildschirm an.

  1. Schreibe in Gardener.cs void ShowCounts(), sodass seedsText.text auf "Seeds: " + seeds und treesText.text auf "Trees: " + trees gesetzt wird.
  2. Rufe die Methode in einem neuen Start() und im if zum Pflanzen nach trees++; auf.

Drücke auf „Spielen“: Die Texte zeigen Seeds: 5 und Trees: 0 an und ändern sich mit jedem Setzling. Drücke dann auf „Prüfen“.

Probier es selbst

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

    // Zeige Seeds: und Trees: von Anfang an in den beiden Textfeldern an
}

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground