Designing heartbeat Haptics in Unity
A well-designed heartbeat rumble pattern reads as a slow, periodic low-frequency pulse — a two-beat thump with a natural pause, built for tension rather than impact. The reason this shape works is that the gap between beats is what creates the anxiety; keep the envelope smooth so it feels biological, not mechanical.
When to use it: it works for low-health states, countdowns, or story beats where a steady rumble would be too aggressive. Tuning notes: A heartbeat is one of the few effects that should feel slightly organic, so designers deliberately avoid a perfectly regular interval — a few milliseconds of jitter between beats reads as living, while a metronome-perfect pulse reads as synthetic. The weak motor can carry the "lub" and the strong motor the "dub", which separates the two beats spatially. Keep the amplitude low: a heartbeat that rivals an explosion in intensity stops being tense and starts being annoying within seconds.
Engine integration
In Unity, Unity exposes both motors through Gamepad.SetMotorSpeeds every frame; drive them from a coroutine that samples the waveform at fixed intervals instead of hardcoding one-shot values. For the heartbeat pattern specifically, for a {effect} curve, step the coroutine along the envelope so the attack/decay shape survives gameplay pacing changes. Unity's gamepad writes are per-frame and CPU-cheap, but be careful about driving SetMotorSpeeds from Update() when the game is paused — pausing freezes the envelope unless you sample against Time.unscaledTime, so clock the coroutine on unscaled time for effects that must survive a pause menu.
Unity's strength is cross-platform reach: the same SetMotorSpeeds call works on Windows, macOS, Android and consoles through the native gamepad backend, so your {effect} effect ships everywhere with one coroutine. The trade-off is that platform quirks live in the Input System layer — on Windows the legacy Input Manager and the new Input System package expose the same motor writes through different entry points, so pick one and keep the whole envelope in that system. Because the loop runs at frame rate, an explosion sampled at 30fps needs the same keyframes as one at 120fps; sample by unscaled time, never by frame count, or the feel drifts between quality presets.
Haptic feedback bridges the gap between digital interaction and physical sensation. Matching the visual and auditory cues with the tactile response is what makes the effect feel intentional rather than decorative.