Manger
Leçon 6 sur 14 du cours Jeu Unity : Snake 3D de Coddy.
Le serpent mange lorsque sa tête arrive sur la case de la nourriture. Tous deux occupent des positions à coordonnées entières, donc comparer leurs positions avec == est sans risque : l’opérateur == de Unity sur Vector3 considère deux positions comme égales lorsqu’elles sont distantes de moins de 0.00001, et l’ajout de cases entières ne crée jamais un écart aussi petit.
Le serpent sait quand il avance ; le GameManager sait où se trouve la nourriture et conserve le score. Ainsi, après chaque déplacement, le serpent pose la question et le GameManager répond : IsFood(cell) renvoie un bool, et Eat() ajoute un point et déplace la nourriture. Le serpent accède au GameManager via une Instance statique, le singleton que tu as découvert dans le parcours C# pour Unity.
Vérifie la case où la tête est arrivée, après le déplacement. On ramasse une clé sur une grille de la même façon :
transform.position = next;
if (key.position == transform.position)
{
keysHeld++;
key.gameObject.SetActive(false);
}Défi
MoyenDans GameManager :
- Ajoute
public static GameManager Instance;, définis-le dansAwake()et ajouteprivate int score;. - Écris
public bool IsFood(Vector3 cell): vrai lorsquecellcorrespond à la position de la nourriture. - Écris
public void Eat(): ajoute 1 àscoreet appelleMoveFood().
Dans Snake, à la fin de Step(), après que la tête a bougé : si la case de la tête contient de la nourriture, appelle Eat().
Appuie sur Play et dirige le serpent vers la nourriture, puis appuie sur Check.
Essayez vous-même
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);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.