# 4. Impulse, Noise, and Extensions Part of [[Cinemachine 3]]. Prev: [[3.Follow LookAt Framing and Orbital]]. Next: [[5.Blends Custom Blends Cut vs Ease]]. **Docs:** [Impulse Sources overview](https://docs.unity3d.com/Packages/[email protected]/manual/CinemachineImpulseSourceOverview.html) · [Impulse Listener](https://docs.unity3d.com/Packages/[email protected]/manual/CinemachineImpulseListener.html) · [Basic Multi Channel Perlin](https://docs.unity3d.com/Packages/[email protected]/manual/CinemachineBasicMultiChannelPerlin.html) · [Apply noise](https://docs.unity3d.com/Packages/[email protected]/manual/setup-apply-noise.html) ## 4.1 Continuous noise vs Impulse | Tool | Feel | When | |---|---|---| | **Basic Multi Channel Perlin** | Ongoing handheld / idle sway | Always-on subtle life | | **Impulse Source → Listener** | Sudden hit that decays | Explosions, landings, footsteps, hits | Stack carefully. For combat cameras, keep Perlin tiny and let Impulse carry impacts. ## 4.2 Add Perlin noise 1. Select the `CinemachineCamera`. 2. **Noise** shortcut → **Basic Multi Channel Perlin** (adds `CinemachineBasicMultiChannelPerlin`). 3. Assign a **Noise Profile** (package samples include profiles; or create your own). 4. Tune **Amplitude Gain** and **Frequency Gain**. ```csharp using UnityEngine; using Unity.Cinemachine; /// <summary> /// Scale handheld noise at runtime (e.g. sprint vs idle). /// NOT compiled in Unity. /// </summary> public sealed class CmNoiseScaler : MonoBehaviour { [SerializeField] CinemachineBasicMultiChannelPerlin noise; [SerializeField] float idleAmplitude = 0.3f; [SerializeField] float sprintAmplitude = 0.8f; public void SetSprinting(bool sprinting) { if (noise == null) return; noise.AmplitudeGain = sprinting ? sprintAmplitude : idleAmplitude; } } ``` ## 4.3 Impulse Sources Two source types (docs): - **`CinemachineImpulseSource`** — fire from code / events (non-collision). - **`CinemachineCollisionImpulseSource`** — reacts to collisions / triggers (e.g. giant footsteps). Listener: add **CinemachineImpulseListener** extension on cameras that should shake. Channel filtering lets Sources affect some Listeners and not others. ```csharp using UnityEngine; using Unity.Cinemachine; /// <summary> /// Fire a raw impulse at an impact point (explosion, heavy land). /// NOT compiled in Unity — confirm GenerateImpulse overloads in 3.1.x API. /// </summary> public sealed class ExplosionImpulse : MonoBehaviour { [SerializeField] CinemachineImpulseSource impulse; [SerializeField] float defaultVelocity = 1f; public void Boom() { if (impulse == null) return; // Common CM3 pattern: impulse.GenerateImpulse(defaultVelocity); // Or direction-aware: // impulse.GenerateImpulse(transform.forward * defaultVelocity); } public void BoomAt(Vector3 worldPos) { if (impulse == null) return; impulse.GenerateImpulseAtPositionWithVelocity(worldPos, Vector3.down * defaultVelocity); } } ``` Wire `Boom()` from animation events ([[Animation Advanced]] part 6), particle collide callbacks ([[Particle Systems and Layered Effects]]), or combat hit logic. ## 4.4 Deoccluder (wall avoidance) Add **CinemachineDeoccluder** (CM2 Collider). Casts toward the camera to pull it in front of geometry. Tune: - Collide Against layers (exclude player / triggers). - Minimum distance from target / wall soft zones. - Damping so it does not snap. Combine with Third Person Follow for classic cover-friendly third-person. ## 4.5 Confiners - **CinemachineConfiner2D** — polygon / composite collider bounds (side-scroll rooms). - **CinemachineConfiner3D** — volume bounds. Assign the bounding shape; damping keeps soft edges. Useful for authored rooms in [[SceneManagement in Unity 6]] additive loads — rebind confiner references when streaming. ## 4.6 Group framing For multi-character shots: **CinemachineGroupFraming** extension with **Rotation Composer**, and a target group object. Prefer this over manually averaging transforms unless you need custom logic. ## Unverified - Exact `GenerateImpulse*` overload names / signatures across 3.1 patches — check API page in your installed package. - Noise Profile asset creation UI labels.