Jedz
Lekcja 6 z 14 w kursie Gra w Unity: Wąż 3D w Coddy.
Wąż zjada jedzenie, gdy jego głowa wchodzi na pole, na którym ono się znajduje. Oba znajdują się na liczbach całkowitych, więc porównywanie ich pozycji za pomocą == jest bezpieczne: operator == w Unity dla Vector3 uznaje dwie pozycje za równe, gdy dzieli je mniej niż 0.00001, a dodawanie całych pól nigdy nie tworzy tak małej różnicy.
Wąż wie, kiedy robi krok; GameManager wie, gdzie znajduje się jedzenie, i prowadzi wynik. Dlatego po każdym kroku wąż pyta, a GameManager odpowiada: IsFood(cell) zwraca wartość typu bool, a Eat() dodaje punkt i przenosi jedzenie. Wąż dociera do GameManagera przez statyczną właściwość Instance — singleton, który poznano na ścieżce C# for Unity.
Sprawdzaj pole, na które weszła głowa, po wykonaniu ruchu. Klucz na siatce podnosi się w ten sam sposób:
transform.position = next;
if (key.position == transform.position)
{
keysHeld++;
key.gameObject.SetActive(false);
}Wyzwanie
ŚredniW GameManager:
- Dodaj
public static GameManager Instance;, ustaw ją wAwake()i dodajprivate int score;. - Napisz
public bool IsFood(Vector3 cell): zwraca true, gdycelljest pozycją jedzenia. - Napisz
public void Eat(): zwiększscoreo 1 i wywołajMoveFood().
W Snake, na końcu Step(), po przesunięciu głowy: jeśli pole zajmowane przez głowę zawiera jedzenie, wywołaj Eat().
Naciśnij Play i skieruj węża na jedzenie, a następnie naciśnij Check.
Spróbuj swoich sił
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);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.