Der Punktestand
Lektion 11 von 14 im Kurs Unity-Spiel: 3D-Snake von Coddy.
Der Punktestand wird in GameManager hochgezählt, aber niemand kann ihn sehen. Ein TextMeshPro-Text in der oberen linken Ecke zeigt ihn an: ein TMP_Text-Feld, das im Inspector festgelegt wird, und dessen text per Code geschrieben wird.
Schreibe den Text an derselben Stelle, an der sich die Zahl ändert, und zwar nach der Änderung. Dann hinkt die Anzeige nie dem Punktestand hinterher. Ein Shop aktualisiert seine Münzen auf dieselbe Weise:
public void Buy(int price)
{
coins -= price;
coinsText.text = "Coins: " + coins;
}Lege den Text auch einmal in Start() fest, damit der erste Frame den tatsächlichen Punktestand anzeigt, unabhängig davon, welcher Text in der Szene steht.
Aufgabe
MittelZeige den Punktestand auf dem Bildschirm an.
- Füge in
GameManagerusing TMPro;undpublic TMP_Text scoreText;hinzu (die Szene verknüpft ScoreText). - Zeige in
Start()Score: 0an. - Zeige in
Eat()nach dem Punkt"Score: " + scorean.
Drücke auf „Spielen“ und iss: Oben links wird Score: 1, Score: 2 gezählt. Drücke dann auf „Prüfen“.
Probier es selbst
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Snake snake;
public GameObject foodPrefab;
private Transform food;
private int score;
void Awake()
{
Instance = this;
}
void Start()
{
food = Instantiate(foodPrefab).transform;
MoveFood();
}
public bool IsFood(Vector3 cell)
{
return cell == food.position;
}
public void Eat()
{
score++;
MoveFood();
}
void MoveFood()
{
List<Vector3> free = new List<Vector3>();
for (int x = -snake.edge; x <= snake.edge; x++)
{
for (int z = -snake.edge; z <= snake.edge; z++)
{
Vector3 cell = new Vector3(x, 0f, z);
if (!snake.Occupies(cell))
{
free.Add(cell);
}
}
}
food.position = free[Random.Range(0, free.Count)];
}
}
Alle Lektionen in Unity-Spiel: 3D-Snake
Übe selbstständig: Unity-Playground