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
Mittel- Füge in
GameManagerusing TMPro;undpublic TMP_Text scoreText;hinzu. Die Szene weist ihm ScoreText oben links zu. - Zeige in
Start()Score: 0an. - Zeige in
Eat()den neuen Punktestand an, alsoScore: 3nach dem dritten Futterstück.
Drücke Play und iss, dann drücke Check.
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)];
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.