Menu
CoddyTech

Comer

Lección 6 de 14 del curso Juego de Unity: Serpiente 3D de Coddy.

La serpiente come cuando su cabeza pisa la casilla de la comida. Ambas posiciones son números enteros, así que es seguro compararlas con ==: el == de Unity para Vector3 considera que dos posiciones son iguales cuando están a menos de 0.00001 de distancia, y sumar casillas enteras nunca deja una diferencia tan pequeña.

La serpiente sabe cuándo da un paso; GameManager sabe dónde está la comida y lleva la puntuación. Así que, después de cada paso, la serpiente pregunta y GameManager responde: IsFood(cell) devuelve un bool, y Eat() suma un punto y mueve la comida. La serpiente accede a GameManager a través de un Instance estático, el singleton que conociste en el recorrido de C# para Unity.

Pregunta por la casilla en la que ha entrado la cabeza, después de moverse. Una llave en una cuadrícula se recoge de la misma manera:

transform.position = next;
if (key.position == transform.position)
{
    keysHeld++;
    key.gameObject.SetActive(false);
}
challenge icon

Desafío

Intermedio

La serpiente se come la comida y suma un punto.

  1. En GameManager, añade public static GameManager Instance;, asígnale un valor en Awake() y añade private int score;
  2. public bool IsFood(Vector3 cell): es verdadero cuando cell es la posición de la comida. public void Eat(): un punto más y después MoveFood().
  3. En Snake, al final de Step(): si GameManager.Instance.IsFood(next), llama a Eat().

Pulsa «Jugar» y guía la serpiente hasta la comida: saltará a una nueva celda. Después, pulsa «Comprobar».

Pruébalo tú mismo

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

Todas las lecciones de Juego de Unity: Serpiente 3D

Practica por tu cuenta: Playground de Unity