Start implementation of diapason mechanics

This commit is contained in:
2026-01-28 18:26:21 +01:00
parent b64a57d810
commit bef8c6ef94
66 changed files with 10191 additions and 98 deletions
@@ -0,0 +1,257 @@
# Audio Listening System - Architecture
## Vue d'ensemble
Le système d'écoute permet au joueur d'utiliser un diapason pour "écouter" les objets et découvrir des informations cachées à travers les sons et vibrations procéduraux.
## Structure des Fichiers
### Core Scripts
**AudioListenable.cs**
- Composant principal pour les objets écoutables
- Génération audio procédurale basée sur le type de matériau
- Gestion des vibrations de manette
- Support pour audio statique custom
**DiapasonListeningHandler.cs**
- Gestionnaire central du mode écoute
- Gère l'état de concentration du joueur
- Contrôle la caméra avec pan et curseur
- Raycast vers les objets écoutables
- Atténuation sonore ambiante
**ListeningVignetteEffect.cs**
- Effet visuel de vignette pour l'état d'écoute
- S'intègre avec URP Volume system
- Transition smooth entre états
### Data Scripts
**AudioEmitterData.cs**
- ScriptableObject pour configurer les types d'émetteurs
- Paramètres procéduraux (fréquences, harmoniques)
- Settings de vibration
- Courbes d'atténuation
### Extended Features
**AudioListenableEvent.cs**
- Ajoute des événements Unity aux objets écoutables
- Support pour trigger une seule fois
- Événements: OnListeningStarted, OnListeningStopped, OnFirstListen
**ThroughWallListener.cs**
- Permet de détecter des objets derrière un mur
- Feedback audio différent selon ce qui est détecté
- Peut highlight des objets importants
**DiapasonDebugger.cs**
- Outil de debugging pour le système
- Affiche l'état du système en temps réel
- Liste tous les objets écoutables
- Gizmos visuels dans la Scene
### Editor Scripts
**AudioListenableEditor.cs**
- Custom Inspector pour AudioListenable
- Boutons Quick Setup par type de matériau
- Test en Play Mode
**AudioListenableBatchSetup.cs**
- EditorWindow pour configuration en masse
- Setup par sélection
- Setup par nom d'objet
- Presets automatiques (walls, doors, etc.)
## Architecture
```
Player
├── DiapasonListeningHandler (Manager)
│ ├── Input Handling
│ ├── State Management (Concentrating/Listening)
│ ├── Camera Control
│ └── Raycast Detection
│
├── ListeningVignetteEffect (Visual)
│ └── URP Volume Integration
│
└── Audio Source (Player sounds)
Scene Objects
├── AudioListenable (Core)
│ ├── Procedural Audio Generation
│ ├── Vibration System
│ └── Distance Attenuation
│
├── AudioListenableEvent (Optional)
│ └── UnityEvent Triggers
│
└── ThroughWallListener (Optional)
└── Behind-Wall Detection
```
## Workflow de Fonctionnement
1. **Activation** (Triangle/Y)
- DiapasonListeningHandler.StartListeningMode()
- Désactive les inputs de mouvement
- Active l'objet diapason
2. **Phase de Concentration**
- Joue le son de respiration
- Attend la durée de concentration
- Prépare le mode écoute
3. **Mode Écoute Actif**
- Curseur souris visible
- Camera pan sur les bords
- Raycast continu vers objets
- Vignette activée
- Atténuation audio ambiante
4. **Interaction avec Objet**
- Clic gauche sur objet écoutable
- Animation du diapason (Tap trigger)
- AudioListenable.StartListening()
- Génération du son procédural
- Activation des vibrations
5. **Désactivation** (Triangle/Y à nouveau)
- Arrêt de l'écoute
- Restauration des inputs
- Désactivation vignette
- Restauration audio ambiant
## Types d'Émetteurs
| Type | Fréquence | Usage |
|------|-----------|-------|
| Generic | 440 Hz | Objets par défaut |
| Wall | 200 Hz | Murs, surfaces plates |
| Wood | 300 Hz | Portes, meubles en bois |
| Metal | 800 Hz | Objets métalliques |
| Glass | 1200 Hz | Vitres, cristal |
| Water | 220 Hz | Eau, liquides |
| Stone | 250 Hz | Pierre, roche |
| Mechanical | 500 Hz | Machines, mécanismes |
| Electrical | 440 Hz | Équipements électriques |
| Organic | 350 Hz | Matériaux vivants |
## Génération Audio Procédurale
### Algorithme de Base
```csharp
// Pour chaque sample
float sample = 0;
// Ajoute les harmoniques
for (int h = 0; h < harmonicCount; h++)
{
float harmFreq = baseFreq * harmonicMultipliers[h];
float harmAmp = harmonicAmplitudes[h];
sample += Sin(2π * harmFreq * time) * harmAmp;
}
// Ajoute le bruit
sample += (Random() - 0.5) * noiseAmount;
// Applique l'envelope
sample *= Sin(π * time / duration);
```
### Caractéristiques par Type
**Metal**: Multiples harmoniques (2.1x, 3.8x, 5.2x) pour son métallique
**Wood**: Peu d'harmoniques + bruit pour texture
**Glass**: Harmoniques aiguës (1.5x, 2.7x, 4.2x)
**Water**: Bruit dominant avec légère oscillation
**Stone**: Bruit granuleux avec harmonique grave
## Système de Vibrations
### Intensité Basée sur Distance
```csharp
intensity = Lerp(minIntensity, maxIntensity, 1 - distance/maxDistance)
```
### Pattern de Vibration
```csharp
pattern = |Sin(time * frequency)|
finalIntensity = intensity * pattern
```
### Contrôles Gamepad
- Utilise `Gamepad.current.SetMotorSpeeds(low, high)`
- Arrêt automatique à la fin de l'écoute
- Arrêt au OnDisable du composant
## Intégration avec d'Autres Systèmes
### Input System
- Utilise PlayerInputManager existant
- Action "Diapason" ajoutée
- Compatible avec système de toggle input
### Audio System
- Un AudioSource sur le joueur pour sons système
- AudioSource sur chaque AudioListenable
- Spatial audio 3D
- Custom attenuation curves
### Camera System
- Contrôle temporaire de la caméra
- Pan basé sur viewport position
- Retour à l'état normal à la sortie
## Performance
### Optimisations
- Génération audio on-demand (pas de pré-calcul)
- AudioClips courts (0.5-2s)
- Un seul objet écouté à la fois
- Raycast avec LayerMask
- Pas de Update() quand inactif
### Considérations
- Génération procédurale légère
- Vibrations: vérification gamepad chaque frame
- Distance checks optimisés avec DistanceSqr
## Extension Future
### AudioEmitterData Integration
Actuellement les presets existent mais ne sont pas utilisés par AudioListenable. Pour les intégrer:
1. Ajouter champ `AudioEmitterData` dans AudioListenable
2. Loader les paramètres depuis le ScriptableObject
3. Permettre override des paramètres individuels
### Visualisation Sonore
- Particle systems pour ondes sonores
- Shader effects sur objets écoutés
- Indicateurs visuels pour objets importants
### Audio Avancé
- Réverbération basée sur l'environnement
- Occlusion sonore
- Support multi-canal
## Troubleshooting Courant
**Pas de son**: Vérifier AudioSource, layer, distance
**Pas de vibration**: Vérifier gamepad connecté
**Camera ne bouge pas**: Vérifier border size, références camera
**Input ne répond pas**: Vérifier action assignée dans inputactions
## Références
- Unity Input System: com.unity.inputsystem 1.17.0
- URP: com.unity.render-pipelines.universal 17.3.0
- Unity 6000.3 APIs