Menu
CoddyTech

Canvas und Text

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

Unity zeichnet Bildschirmtext, Schaltflächen und Leisten mit seinem UI-System. In Unity 6 fügt GameObject > UI > Text - TextMeshPro ein Textobjekt namens Text (TMP) hinzu; beim ersten Mal fragt Unity, ob die TMP Essentials importiert werden sollen, die der Text für seine Schriftart benötigt. Wenn die Szene noch kein Canvas hat, erstellt Unity eines und fügt den Text darin ein, außerdem ein EventSystem, über das UI-Klicks laufen. Das Canvas zeichnet seine untergeordneten Objekte über dem Kamerabild an einer festen Stelle auf dem Bildschirm, unabhängig davon, wohin die Kamera blickt. Stelle den Canvas Scaler auf Scale With Screen Size, 1920 x 1080, Match 0.5 ein, wie es jede Szene in diesem Kurs tut, und das Layout behält seine Proportionen bei jeder Bildschirmgröße bei.

Die Komponente des Textes heißt TextMeshPro - Text (UI). Skripte speichern sie in einem Feld ihres Basistyps TMP_Text aus dem Namespace TMPro und ändern über ihre Eigenschaft text, eine Zeichenfolge, was sie anzeigt. Dieses Skript benennt die Ebene beim Start:

using UnityEngine;
using TMPro;

public class LevelIntro : MonoBehaviour
{
    public TMP_Text titleText;

    void Start()
    {
        titleText.text = "World 2: Ice Caves";
    }
}

Ziehe das Objekt Text (TMP) aus der Hierarchy in das Feld Title Text im Inspector, und Unity trägt seine Textkomponente in das Feld ein. Ohne using TMPro; ist der Name TMP_Text unbekannt und das Skript lässt sich nicht kompilieren (CS0246). Bleibt das Feld leer, löst das erste titleText.text eine UnassignedReferenceException aus. Was das Skript schreibt, ersetzt den im Inspector eingegebenen Text Input, der bei einem neu erstellten Text New Text lautet.

challenge icon

Aufgabe

Einfach

Zeige oben in ZoneText an, in welcher Zone sich der Erkunder befindet.

  1. Füge in Explorer.cs using TMPro; und das Feld public TMP_Text zoneText; hinzu. Die Szene verknüpft ZoneText mit diesem Namen.
  2. Setze in Update() unterhalb des Kommentars zoneText.text auf Zone: Beach, solange transform.position.x kleiner als 2 ist, und andernfalls auf Zone: Jungle.

Klicke auf „Spielen“ und gehe nach rechts auf das Gras: Der Text wechselt zu Jungle. Klicke dann auf „Prüfen“.

Probier es selbst

using UnityEngine;

public class Explorer : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        float move = Input.GetAxisRaw("Horizontal");
        transform.Translate(move * speed * Time.deltaTime, 0f, 0f);

        // Zeige die Zone in ZoneText an: Zone: Beach bei x unter 2, Zone: Jungle ab 2
    }
}

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground