Haptic feedback runtime APIs
Updated: Apr 15, 2026
While
Haptics Studio and
Haptics SDK are the recommended path for haptics on Quest, there are a number of other haptics APIs available in the runtime. These provide lower-level control to your application and may be useful in some specific contexts. You may consider these APIs when building custom middleware integrations, or when you need controller-specific features, such as localized haptics on Meta Quest Touch Pro controllers.
This guide describes how to use Unreal Blueprints to control haptic effects on Meta Quest Touch controllers.
Use the Set Haptics by Value Blueprint to start and stop haptics for a controller.
To start, update, or end vibration, call Set Haptics by Value in the frame you want to make the change and define the frequency and amplitude of the haptic response.
Expected values for amplitude and frequency are any value between zero and one, inclusive. The greater the value, the stronger or more frequent the vibration in the controller. To end the vibration, set both amplitude and frequency to 0. Controller vibration automatically ends 2 seconds after the last input.
Meta Quest Touch Pro supports three haptic locations: hand, thumb, and index. Meta Quest Touch and Meta Quest Touch Plus (Quest 3/3S) controllers support hand-level haptics only.
The Play Sound Wave Haptic Effect Blueprint splits a sound wave into multiple batches. Each batch is sent to the controller in one frame. The first send’s append argument is set by the Blueprint. All subsequent sends’ append arguments are set to true.
A CVar can be added to BaseDeviceProfiles.ini to control the duration of each PCM batch. Default value is 36ms. Example: +CVars= r.Mobile.Oculus.PCMBatchDuration = 36
For example, a sound wave with a sample rate of 2000 and the default PCMBatchDuration (36 ms) produces a batch size of 72 samples (2 samples/ms × 36 ms).
A large PCMBatchDuration increases CPU overhead. However, if PCMBatchDuration is too low compared to frametime, haptics data could be dropped.
In Unreal Engine 5, to use a sound wave as a haptic effect, the sound wave's LoadingBehavior must be set to Force Inline.
The Play Amplitude Envelope Haptic Effect Blueprint sends all amplitude data to the controller in a single call. Duration is calculated from the sample rate specified in the Blueprint. This duration should not be greater than the return value of Get Max Haptic Duration.
The following example shows some of the Blueprints triggered by input mappings.
Buffered haptics in Unreal Engine
Deprecated
The OVRHaptics API has been removed from the Meta XR plugin. This API was specific to the original Oculus Rift headset with external tracking sensors and is not available on Meta Quest devices. Use Haptics SDK or the runtime APIs described above for current haptic feedback features.