Hi Creators!
We’re excited to announce two great updates to our Haptics system, making it more powerful and easier to learn. As a quick refresher, haptics refer to tactile feedback – like a buzz or a rumble – used to enhance immersion in a game. Many of you have already added them to your experiences since our full release of HapticEffects earlier this year, whether you’re using one of our predefined effects or creating your own!
Today, we’re announcing:
The new HapticEffect:Ended event: This tells you when a HapticEffect is done playing.
Haptics in Studio Templates: You can now get haptics out-of-the-box in multiple Templates and take inspiration from these examples.
Keep reading to learn more!
Introducing HapticEffect:Ended
We’ve heard your feedback and added the new HapticEffect:Ended event, which fires when your HapticEffect has completed playback and stopped.
This is critical for good memory management. It allows you to reliably perform garbage collection and destroy the HapticEffect only once it has completed playback, which helps you save memory when haptics are not active.
Here’s how you would use it in practice:
local effect = Instance.new("HapticEffect")
effect.Parent = workspace
effect.Type = Enum.HapticEffectType.GameplayExplosion
effect:Play()
-- Connect to the event to clean up the instance
effect.Ended:Connect(function()
print("Haptic Effect Finished")
effect:Destroy()
end)
Haptics in Studio Templates
To help you get started, we’ve integrated haptics directly into our standard Studio Templates. Even if you aren’t starting from scratch, we encourage you to open them up to see how we wired up the effects – they could be applicable to your game as well!
When you open these templates, you’ll find:
Platformer: A light buzz when collecting coins. This is a great example of how to integrate haptics into UI/UX.
Laser tag / FPS: Unique vibrations when firing different weapons. This shows you how to integrate haptics into gameplay.
Racing: Strong rumbles when activating nitro, plus dynamic haptics that vary in intensity based on collision force. Check this out for an advanced use case where the haptic curve is dynamically generated each time it is triggered.
You can find these under the Templates tab in Studio.
Made with love
These new improvements were made possible thanks to @RickleSandwich, @LittleEel0621, @runitbackrolfo, and @MetaVars.
We’ve loved seeing your implementations of haptics & cannot wait to see more! Let us know about your experience and if you encounter any issues! ![]()

