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
MoyenLe serpent mange la nourriture et marque un point.
- Dans
GameManager, ajoutepublic static GameManager Instance;, définie dansAwake(), etprivate int score; public bool IsFood(Vector3 cell): true lorsque cell correspond à la position de la nourriture.public void Eat(): un point de plus, puisMoveFood().- Dans
Snake, à la fin deStep(): siGameManager.Instance.IsFood(next), appelleEat().
Appuie sur « Jouer » et dirige le serpent vers la nourriture : elle passe à une nouvelle case. Puis clique sur « Vérifier ».
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);
}
}
Toutes les leçons de Jeu Unity : Snake 3D
Entraînez-vous par vous-même : Playground Unity