Menu
CoddyTech

Fressen

Lektion 6 von 14 im Kurs Unity-Spiel: 3D-Snake von Coddy.

Die Schlange frisst, wenn ihr Kopf auf das Feld mit dem Futter tritt. Beide befinden sich auf ganzen Zahlen, daher ist es sicher, ihre Positionen mit == zu vergleichen: Unitys == für Vector3 wertet zwei Positionen als gleich, wenn sie weniger als 0.00001 voneinander entfernt sind, und beim Addieren ganzer Felder entsteht nie ein so kleiner Abstand.

Die Schlange weiß, wann sie einen Schritt macht; GameManager weiß, wo das Futter ist, und verwaltet den Punktestand. Nach jedem Schritt fragt also die Schlange, und GameManager antwortet: IsFood(cell) gibt einen bool zurück, und Eat() fügt einen Punkt hinzu und bewegt das Futter. Die Schlange erreicht GameManager über eine statische Instance, das Singleton, dem du in der C#-für-Unity-Reise begegnet bist.

Frage nach dem Feld, das der Kopf nach der Bewegung betreten hat. Ein Schlüssel auf einem Raster wird auf dieselbe Weise aufgenommen:

transform.position = next;
if (key.position == transform.position)
{
    keysHeld++;
    key.gameObject.SetActive(false);
}
challenge icon

Aufgabe

Mittel

Die Schlange frisst das Futter und erhält einen Punkt.

  1. Füge in GameManager public static GameManager Instance; hinzu, das in Awake() gesetzt wird, sowie private int score;
  2. public bool IsFood(Vector3 cell): true, wenn cell die Position des Futters ist. public void Eat(): ein weiterer Punkt, dann MoveFood().
  3. Rufe in Snake am Ende von Step() Eat() auf, wenn GameManager.Instance.IsFood(next) gilt.

Drücke „Spielen“ und steuere die Schlange auf das Futter: Es springt zu einer neuen Zelle. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public Snake snake;
    public GameObject foodPrefab;
    private Transform food;

    void Start()
    {
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    void MoveFood()
    {
        int x = Random.Range(-snake.edge, snake.edge + 1);
        int z = Random.Range(-snake.edge, snake.edge + 1);
        food.position = new Vector3(x, 0f, z);
    }
}

Alle Lektionen in Unity-Spiel: 3D-Snake

Übe selbstständig: Unity-Playground