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.
Aufgabe
EinfachZeige oben in ZoneText an, in welcher Zone sich der Erkunder befindet.
- Füge in
Explorer.csusing TMPro;und das Feldpublic TMP_Text zoneText;hinzu. Die Szene verknüpft ZoneText mit diesem Namen. - Setze in
Update()unterhalb des KommentarszoneText.textaufZone: Beach, solangetransform.position.xkleiner als2ist, und andernfalls aufZone: 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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der BankÜbe selbstständig: Unity-Playground