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);
}Aufgabe
MittelDie Schlange frisst das Futter und erhält einen Punkt.
- Füge in
GameManagerpublic static GameManager Instance;hinzu, das inAwake()gesetzt wird, sowieprivate int score; public bool IsFood(Vector3 cell): true, wenn cell die Position des Futters ist.public void Eat(): ein weiterer Punkt, dannMoveFood().- Rufe in
Snakeam Ende vonStep()Eat()auf, wennGameManager.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