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ąż zjada jedzenie i zdobywa punkt.
- W
GameManagerdodajpublic static GameManager Instance;, ustaw wAwake()oraz dodajprivate int score; public bool IsFood(Vector3 cell): zwraca prawdę, gdy komórka jest pozycją jedzenia.public void Eat(): dodaje jeden punkt, a następnie wywołujeMoveFood().- W
Snake, na końcuStep(): jeśliGameManager.Instance.IsFood(next), wywołajEat().
Naciśnij „Graj” i skieruj węża na jedzenie: przeskoczy ono do nowej komórki. Następnie naciśnij „Sprawdź”.
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);
}
}
Wszystkie lekcje w sekcji Gra w Unity: Wąż 3D
Poćwicz samodzielnie: Edytor online Unity