Essen
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);
}Aufgabe
MittelIn GameManager:
- Füge
public static GameManager Instance;hinzu, setze es inAwake()und fügeprivate int score;hinzu. - Schreibe
public bool IsFood(Vector3 cell): wahr, wenncelldie Position des Essens ist. - Schreibe
public void Eat(): addiere 1 zuscoreund rufeMoveFood()auf.
Füge in Snake am Ende von Step(), nachdem sich der Kopf bewegt hat, Folgendes hinzu: Wenn das Feld des Kopfes das Essen ist, rufe Eat() auf.
Drücke Play und steuere die Schlange auf das Essen, dann drücke Check.
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);
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.