Start implementation of diapason mechanics
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user