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);
}Desafío
IntermedioLa serpiente se come la comida y suma un punto.
- En
GameManager, añadepublic static GameManager Instance;, asígnale un valor enAwake()y añadeprivate int score; 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ésMoveFood().- En
Snake, al final deStep(): siGameManager.Instance.IsFood(next), llama aEat().
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