# Système d'Écoute Diapason - Checklist d'Implémentation ## ✅ Scripts Créés (Compilés sans erreur) ### Core System - [x] **DiapasonListeningHandler.cs** - Gestionnaire principal du mode écoute - [x] **AudioListenable.cs** - Composant pour objets écoutables - [x] **ListeningVignetteEffect.cs** - Effet visuel de vignette - [x] **AudioEmitterData.cs** - ScriptableObject pour configuration ### Extensions - [x] **AudioListenableEvent.cs** - Événements UnityEvent pour objets écoutables - [x] **ThroughWallListener.cs** - Détection d'objets derrière les murs - [x] **DiapasonDebugger.cs** - Outils de debugging ### Editor Tools - [x] **AudioListenableEditor.cs** - Custom Inspector avec Quick Setup - [x] **AudioListenableBatchSetup.cs** - Configuration en masse via EditorWindow ### Data - [x] **9 Présets AudioEmitterData** créés dans `/Assets/Unheimlich_POC/Datas/AudioEmitters/`: - WallEmitter.asset - MetalEmitter.asset - WoodEmitter.asset - GlassEmitter.asset - StoneEmitter.asset - MechanicalEmitter.asset - ElectricalEmitter.asset - WaterEmitter.asset - OrganicEmitter.asset ### Documentation - [x] **README.md** - Architecture et documentation technique - [x] **Page Système d'Écoute - Diapason** - Guide complet utilisateur ## ⚠️ Configuration Manuelle Requise ### 1. Input System Setup **Fichier**: `/Assets/Unheimlich_POC/Inputs/PlayerController.inputactions` **Actions à faire**: 1. Ouvrir le fichier dans l'Input System window 2. Dans l'Action Map "Player", ajouter une nouvelle action: - Nom: `Diapason` - Action Type: `Button` - Control Type: `Button` 3. Ajouter les bindings: ``` PS5 Controller: Triangle (Button South) Xbox Controller: Y (Button North) Keyboard: T (ou touche de votre choix) ``` 4. Sauvegarder et générer la classe C# ### 2. PlayerInputManager Configuration **GameObject**: `/GAMEPLAY/Player` **Dans l'Inspector du PlayerInputManager**: 1. Trouver le champ `Diapason Action` 2. Assigner l'action "Diapason" depuis le PlayerController.inputactions 3. Vérifier que la callback `OnDiapason` est bien configurée ### 3. DiapasonListeningHandler Setup **GameObject**: `/GAMEPLAY/Player` **Actions**: 1. Ajouter le composant `DiapasonListeningHandler` 2. Assigner les références: - **Diapason Object**: Glisser `/GAMEPLAY/Player/Diapason` - **Diapason Animator**: Glisser l'Animator du Diapason - **Player Camera**: Glisser `/GAMEPLAY/Player/CameraPivot/Main Camera` - **Diapason Action**: Assigner l'InputActionReference vers l'action Diapason 3. Configurer les paramètres: ``` Listening Range: 5.0 Listenable Layers: Interactable (ou créer un layer "Listenable") Concentration Duration: 1.0 Breath In Duration: 0.5 Camera Pan Speed: 2.0 Camera Pan Border Size: 0.1 Max Camera Pan Angle: 15.0 Vignette Intensity: 0.5 Ambient Attenuation Amount: 0.3 ``` ### 4. Animator du Diapason **GameObject**: `/GAMEPLAY/Player/Diapason` **Parameters requis**: 1. Ouvrir l'Animator Controller 2. Ajouter les parameters: - `IsEquipped` (Bool) - `Tap` (Trigger) 3. Créer les animations: - **Idle**: Animation de repos (peut être vide) - **Tap**: Animation de frappe du diapason 4. Setup des transitions: - Any State → Tap (Condition: Trigger Tap) - Tap → Idle (Exit Time) ### 5. Audio Clips **À créer ou importer**: 1. **Breath In Sound** (_breathInClip): - Son d'inspiration profonde - Durée: ~0.5-1 seconde - Format: WAV ou MP3 2. **Diapason Tap Sound** (_diapasonTapClip): - Son métallique de diapason - Durée: ~0.3-0.5 seconde - Légère résonance **Où les assigner**: - Dans le composant `DiapasonListeningHandler` sur le Player ### 6. Layer Configuration (Optionnel mais Recommandé) **Project Settings → Tags and Layers** 1. Créer un nouveau layer: `Listenable` 2. Dans `DiapasonListeningHandler`, assigner ce layer 3. Tous les objets avec `AudioListenable` devraient utiliser ce layer Ou réutiliser le layer existant `Interactable`. ### 7. Vignette Effect (Optionnel) **GameObject**: `/ENVIRONMENT/Global Volume` (ou créer) **Si vous voulez l'effet de vignette**: 1. S'assurer qu'un Global Volume existe avec URP 2. Ajouter le composant `ListeningVignetteEffect` au Player 3. Assigner le Global Volume 4. Dans le DiapasonListeningHandler, assigner la référence `Vignette Effect` ## 🎯 Test Initial ### Test Rapide du Système 1. **Enter Play Mode** 2. Appuyer sur **T** (ou Triangle/Y sur manette) 3. **Observer**: - Phase de concentration (~1 seconde) - Curseur apparaît - Le diapason devient visible 4. **Pointer** vers un objet avec AudioListenable 5. **Clic gauche** pour taper 6. **Écouter** le son généré 7. **Appuyer à nouveau sur T** pour sortir ### Ajout d'Objets Écoutables pour Test **Méthode Rapide**: 1. Sélectionner des GameObjects dans la scène (murs, portes, etc.) 2. Menu: `Tools → Unheimlich → Audio Listenable Batch Setup` 3. Choisir le type (ex: Wall) 4. Cliquer "Add to Selected Objects" 5. S'assurer que les objets ont un Collider 6. Assigner le layer "Listenable" ou "Interactable" **Ou utiliser les presets**: - "Setup All Walls in Scene" - Configure tous les objets contenant "wall" - "Setup All Doors in Scene" - Configure tous les objets contenant "door" ## 📋 Vérification Post-Setup ### Checklist Finale - [ ] L'action "Diapason" existe dans PlayerController.inputactions - [ ] DiapasonAction est assigné dans PlayerInputManager - [ ] DiapasonListeningHandler est sur le Player avec toutes les références - [ ] L'Animator du diapason a les parameters IsEquipped et Tap - [ ] Au moins un objet dans la scène a AudioListenable - [ ] Les objets écoutables ont un Collider - [ ] Les objets écoutables sont sur le bon layer - [ ] Les AudioClips sont assignés (ou commentés pour test) - [ ] Aucune erreur de compilation ### Test Avancé 1. **Test Audio Procédural**: Vérifier différents types de matériaux 2. **Test Vibrations**: Tester avec une manette connectée 3. **Test Distance**: S'éloigner pour vérifier l'atténuation 4. **Test Camera Pan**: Bouger le curseur sur les bords 5. **Test Through Wall**: Si implémenté, tester ThroughWallListener ## 🛠️ Outils Disponibles ### Menu Tools `Tools → Unheimlich → Audio Listenable Batch Setup` - Configuration en masse d'objets écoutables - Presets automatiques par nom ### Custom Inspector Sur un GameObject avec `AudioListenable`: - Boutons Quick Setup par type de matériau - Test en Play Mode ### Debug Ajouter `DiapasonDebugger` au Player ou un GameObject de scene: - Affichage info système en temps réel - Liste des objets écoutables - Gizmos visuels - Context menu pour enable/disable all ## 📖 Documentation ### Guides Disponibles - **Système d'Écoute - Diapason** (Page): Guide complet utilisateur - **README.md** (Scripts/Audio): Architecture technique - **IMPLEMENTATION_CHECKLIST.md** (ce fichier): Checklist de setup ### Exemples de Code Voir les scripts d'exemple: - `AudioListenableEvent.cs` - Pour ajouter des événements - `ThroughWallListener.cs` - Pour écouter à travers les murs ## ⚡ Quick Start (Minimum Viable) **Pour tester rapidement sans tout configurer**: 1. Ajouter `DiapasonListeningHandler` au Player 2. Créer une action Input "Diapason" binding sur T 3. Assigner les 3 références principales (Diapason, Animator, Camera) 4. Ajouter `AudioListenable` sur quelques objets 5. Play et appuyer sur T **Note**: Sans les AudioClips, le système fonctionne mais sans les sons de respiration et de tap. ## 🐛 Troubleshooting **Rien ne se passe quand j'appuie sur T**: - Vérifier l'action Input existe et est assignée - Vérifier que le Player n'est pas dans un autre état qui bloque les inputs - Regarder la Console pour des erreurs **Pas de son lors du tap**: - Vérifier que l'objet ciblé a AudioListenable - Vérifier le layer de l'objet - Vérifier la distance (max 5m par défaut) - Vérifier que l'objet a un Collider **La caméra ne bouge pas**: - Vérifier Camera Pan Border Size > 0 - Vérifier que Player Camera est assigné - Bouger le curseur tout au bord de l'écran ## ✨ C'est Prêt! Le système est entièrement implémenté et prêt à l'emploi. Il suffit de suivre les étapes de configuration manuelle ci-dessus et vous pourrez commencer à tester immédiatement!