Mangiare
Lezione 6 di 14 del corso Gioco in Unity: Snake 3D di Coddy.
Il serpente mangia quando la sua testa entra nella cella del cibo. Entrambi si trovano su numeri interi, quindi confrontare le loro posizioni con == è sicuro: in Unity, == su Vector3 considera uguali due posizioni quando distano meno di 0.00001, e aggiungere celle intere non crea mai una distanza così piccola.
Il serpente sa quando fa un passo; GameManager sa dov'è il cibo e tiene il punteggio. Quindi, dopo ogni passo, il serpente chiede e GameManager risponde: IsFood(cell) restituisce un bool, e Eat() aggiunge un punto e sposta il cibo. Il serpente raggiunge GameManager tramite un Instance statico, il singleton che hai incontrato nel percorso C# for Unity.
Verifica la cella in cui è entrata la testa, dopo lo spostamento. Una chiave su una griglia si raccoglie allo stesso modo:
transform.position = next;
if (key.position == transform.position)
{
keysHeld++;
key.gameObject.SetActive(false);
}Sfida
MedioIn GameManager:
- Aggiungi
public static GameManager Instance;, impostalo inAwake()e aggiungiprivate int score;. - Scrivi
public bool IsFood(Vector3 cell): vero quandocellè la posizione del cibo. - Scrivi
public void Eat(): aggiungi 1 ascoree chiamaMoveFood().
In Snake, alla fine di Step(), dopo che la testa si è spostata: se la cella della testa contiene del cibo, chiama Eat().
Premi Play e guida il serpente fino al cibo, poi premi Check.
Provalo tu
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);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.