# 04 — Ennemis

Ajoute des points de spawn d'ennemis, cuit un NavMesh pour que les ennemis puissent se déplacer, et remplace la sortie par une porte à monstre.

Prérequis : [02-simple-room.md](02-simple-room.md).

---

## Marqueurs de spawn d'ennemis

1. Clic droit sur l'objet racine → **Create Empty**
2. Renomme-le `EnemySpawn`
3. Place-le sur le sol, loin des murs
4. Répète — place **4 à 8** répartis dans la salle

Le jeu choisit des points de spawn au hasard selon la difficulté, en évitant les points trop proches du joueur.

> **Conseil** : ne place jamais un point de spawn dans la géométrie ou directement devant la porte — les ennemis peuvent bloquer la sortie.

---

## NavMesh — navigation des ennemis

Les ennemis utilisent le **NavMesh** intégré d'Unity pour se déplacer. Sans lui, les ennemis spawnent mais restent figés — ils ne peuvent pas marcher.

### Pourquoi les salles custom ont besoin de leur propre NavMesh

Les salles intégrées du jeu font toutes partie de la même scène. Leur NavMesh est cuit une fois à la construction de la scène et couvre toute leur géométrie. Les salles custom sont instanciées au **runtime** depuis ton bundle — elles ne font pas partie de la scène au moment où le NavMesh a été cuit, elles ne sont donc pas couvertes.

DKReforged résout ça en chargeant tous les assets `NavMeshData` trouvés dans ton bundle et en appelant `NavMesh.AddNavMeshData()`, ajoutant la surface navigable de ta salle au NavMesh actif au runtime.

> **NavMeshAgent** est le composant sur les ennemis qui leur permet de suivre la surface de navigation. Les ennemis du jeu l'ont déjà — tu n'y touches pas. Tu fournis seulement les données de surface.

### Cuire le NavMesh (intégré, aucun package supplémentaire)

1. Assure-toi que la scène contient la géométrie de ta salle (sol, murs) placée normalement dans la hiérarchie
2. Ouvre **Window → Navigation**
3. Dans l'onglet **Bake**, clique sur **Bake**
4. Unity crée un fichier `NavMesh.asset` dans un dossier portant le nom de ta scène (visible dans le panel Project)

> Les murs et plafonds sont automatiquement exclus — seules les surfaces assez plates pour marcher sont incluses.

### Inclure les données NavMesh dans le bundle

1. Dans le panel Project, trouve `NavMesh.asset` (dans le dossier portant le nom de ta scène)
2. Sélectionne-le → en bas de l'Inspector, ouvre le menu déroulant **AssetBundle** → règle-le sur le nom de ton bundle (ex. `mon-pack`)
3. Exporte le bundle à nouveau — le NavMesh est maintenant empaqueté avec la salle

Quand DKReforged charge le bundle, il trouve l'asset `NavMeshData` et l'enregistre automatiquement avec `NavMesh.AddNavMeshData()`.

---

## Porte à monstre

Avec des ennemis dans la salle, remplace `UnbarredDoor` par `MonsterLock` :

1. Dans la Hierarchy, développe `WhatLockIsNeeded`
2. Supprime l'enfant `UnbarredDoor`
3. Clic droit sur `WhatLockIsNeeded` → **Create Empty** → renomme `MonsterLock`
4. Optionnellement, ajoute de la géométrie visuelle dans `MonsterLock` :
   - Des Cubes en forme de barreaux, un mesh de grille, ou tout visuel représentant une grille fermée
   - Ces objets deviennent **visibles** (actifs) quand tous les ennemis sont morts — ils signalent "la sortie est ouverte"

> `MonsterLock` démarre **inactif** et est activé par le jeu quand tous les ennemis de la salle sont morts. Le joueur traverse ensuite l'ouverture pour continuer.

---

## Hierarchy après ce tutoriel

```
mon-pack_SallePrincipale
├── ... (géométrie, lumières)
├── SpawnHere
├── EnemySpawn  (×4–8)
├── LootSpawner (×5)
└── WhatLockIsNeeded
    └── MonsterLock
        └── [géométrie de grille optionnelle]
```

Le `NavMesh.asset` est un **asset séparé** dans le bundle — pas un enfant de l'objet salle.

---

## Suite

→ [05-trap-room.md](05-trap-room.md) — ajouter des pièges
