Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Zeige den Punktestand auf dem Bildschirm an.

  1. Füge in GameManager using TMPro; und public TMP_Text scoreText; hinzu (die Szene verknüpft ScoreText).
  2. Zeige in Start() Score: 0 an.
  3. Zeige in Eat() nach dem Punkt "Score: " + score an.

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