Comer
Lección 6 de 14 del curso Juego de Unity: Snake 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);
}Desafío
IntermedioEn GameManager:
- Añade
public static GameManager Instance;, asígnale un valor enAwake()y añadeprivate int score;. - Escribe
public bool IsFood(Vector3 cell): verdadero cuandocellsea la posición de la comida. - Escribe
public void Eat(): suma 1 ascorey llama aMoveFood().
En Snake, al final de Step(), después de que la cabeza se haya movido: si la casilla de la cabeza contiene comida, llama a Eat().
Pulsa Play y guía a la serpiente hasta la comida; después, pulsa Check.
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);
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.