Menu
CoddyTech

Mangiare

Lezione 6 di 14 del corso Gioco 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);
}
challenge icon

Sfida

Medio

Il serpente mangia il cibo e guadagna un punto.

  1. In GameManager, aggiungi public static GameManager Instance;, impostandolo in Awake(), e private int score;
  2. public bool IsFood(Vector3 cell): vero quando cell è nella posizione del cibo. public void Eat(): un punto in più, poi MoveFood().
  3. In Snake, alla fine di Step(): se GameManager.Instance.IsFood(next), chiama Eat().

Premi «Gioca» e guida il serpente fino al cibo: salta in una nuova cella. Poi premi «Verifica».

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);
    }
}

Tutte le lezioni di Gioco Unity: Snake 3D

Esercitati da solo: Playground Unity