Hapthicks is a modern, cross-platform haptic feedback toolkit
and editor for Unity,
designed for game developers and creators who want to build precise,
rich, and customizable tactile experiences for iOS and
Android.
With Hapthicks, you can author advanced haptic envelopes, leverage
native vibration engines,
and rapidly prototype haptic effects using an intuitive Unity Editor
tool.
The system includes full support for
importing/exporting .hapthick files, AHAP (Apple
Haptic Audio Pattern) conversion,
audio-driven haptic curve generation, and seamless
integration into your game or interactive app.
Hapthicks bridges the gap between creative design and
technical haptics implementation.
Author, preview, and refine haptic feedback right inside the Unity
Editor using familiar tools and audio-driven curve generation.
Save, load, and share your haptic assets with
one-click export and QR code mobile download.
All haptic playback code is engineered for efficiency, with
minimal GC pressure, high precision, and robust support for both
amplitude-controlled and classic Android vibration APIs.
All code and editor tools are built to be extensible,
well-commented, and ready for integration into commercial or indie
projects.
Hapthicks is built with:
C# and UnityEngine: For runtime playback and editor
tooling.
Native Bindings: For high-fidelity vibration using iOS Core
Haptics and Android VibrationEffect APIs.
Modern Unity EditorWindow/IMGUI: For an efficient and
familiar editing workflow.
Async QR/Upload: For fast file transfer and sharing with
mobile devices.
No third-party frameworks or SDKs required—just drop it into your
Unity project and start creating.
Hapthicks is available on the Unity Asset Store for quick
installation and updates.
Follow these steps to add Hapthicks to your project:
The Hapthick Editor lets you design, preview, and export haptic
feedback assets right inside the Unity Editor.
To open the editor:
Tip: You can dock the Hapthick Editor window anywhere in the Unity Editor for a smoother workflow.
After importing the Hapthick toolkit, your project will include some sample scenes and UI for testing purposes. When preparing for release or integration into your own workflow, you only need to keep the following runtime and platform-dependent files:
Editor/HapthickAssetPostProcessor.cs
Editor/HapthickEditor.cs
Editor/HapthickImporter.cs
Editor/HapthickScriptedImporter.cs
Editor/HapthickInspector.cs
Runtime/AhapGenerator.cs
Runtime/HapticEngineLifecycle.cs
Runtime/Hapthicks.cs
Runtime/HapticSharedData.cs
Plugins/iOS/HapticBridge.mm
Plugins/iOS/HapticBridge.h
Plugins/Android/AndroidManifest.xml
Resources/android_store_icon
Resources/ios_store_icon
You can safely remove any example scenes, UI prefabs, or editor test assets not required for your runtime build.
The Hapthicks Companion App lets you preview your haptic
feedback on a real device instantly—just scan a QR code generated by
the editor.
To install the app:
Note: Make sure your device supports advanced haptic feedback (iPhone 8 or newer, Android 8.0+ recommended).
After opening the Hapthick Editor from Tools/Hapthick Editor, you
can create a new haptic feedback asset by clicking the
Create New Hapthick button, for opening an existing hapthick
file just simply double tap on any existing .hapthick file in your
project or click on Open Existing Hapthick button and select
the file you want to open.
.ahap files are Apple Haptic Audio Pattern files that can store
haptic feedback patterns.
To import an .ahap file into your Hapthick project, follow these
steps:
The Audio section lets you select an AudioClip as
input for generating haptic curves that reflect the sound's
structure. Once an AudioClip is selected, a waveform is extracted
and used to drive haptic intensity and sharpness.
You can control how detailed this waveform is with the
Waveform Detail slider and optional
Advanced Settings.
The advanced settings provide fine control over the resolution of the waveform envelope that is extracted from the AudioClip.
These point counts, along with the waveform detail slider, are used internally to compute the sampling step size during waveform extraction. The result feeds directly into intensity curve generation via the Generate Intensity Curve button.
This section allows you to generate haptic curves based on the
structure of your selected AudioClip. Once the audio waveform is
analyzed, you can convert it into dynamic intensity and sharpness
curves for realistic and synchronized haptic feedback.
The Generate Audio Waveform button extracts an
amplitude envelope from the AudioClip using the selected
Waveform Detail and advanced sampling settings. This
waveform acts as the base data for generating both intensity and
sharpness curves.
Curve Generation includes adjustable sliders for:
Generated curves are immediately visualized in the editor window, with real-time waveform overlays for reference (if enabled). These curves can then be saved as a .hapthick file or exported to Apple's .ahap format for native iOS haptics.
The Haptic Properties section defines the core playback parameters
of your haptic asset. The most important value here is the
Haptic Duration, which sets the total length of
your generated haptic effect. This duration directly determines the
time range for your intensity and sharpness curves.
When you modify the duration, the editor automatically resizes the
end keyframe of both curves to ensure proper alignment. You can
fine-tune curves within this duration range using the integrated
curve editor, which also supports waveform overlays for visual
feedback.
Force Smooth on iOS disables all transient events
(short tap-like spikes) during export and playback, forcing iOS to
use only the continuous waveform.
Note: Enable this option if you want to match the
Haptic feeling in your iOS version with your Android version.
No Amplitude Control Threshold helps define the minimum value above which your haptic curve should play on Android devices that do not support amplitude control (typically older or budget devices).
On iOS devices, haptic sharpness can be used to emphasize transients
or smooth out continuous effects. This section allows you to
configure how sharpness behaves for your haptic.
Two modes are supported:
Switching between modes automatically updates how the data is saved and used during runtime and export. In Curve mode, the sharpness graph is synced to the intensity curve's timing. In Constant mode, the Sharpness Value slider becomes active.
Once your haptic design is complete, you can save or export it for
use in your game or for testing on real devices. The editor supports
two primary formats: the native .hapthick format used within Unity,
and Apple's .ahap format for iOS Core Haptics playback.
In addition, a QR Code generator makes it easy to
share and test your hapthick files on the Hapthick Mobile App by
uploading the asset and providing a scannable code.
To support native haptic playback on iOS via Core Haptics, you can export your haptic curves as .ahap files. This allows for precise integration with iOS apps.
If With Transients mode is selected, additional parameters will be used to identify and extract transients for separate export. These include:
A point is marked as a transient if it meets either the PEAK_I or SHARP_HI threshold, and its neighbors fall below VALLEY_I.
Hapthick provides a static Hapthicks
class (so you
can call if from anywhere in your project) to play haptic feedback
at runtime on both iOS and Android. It supports flat vibrations,
predefined effects, and advanced envelope-based patterns via
.hapthick files.
You can trigger built-in system haptic feedback using:
Hapthicks.PlayPredefinedHaptic(
iOSPredefinedEffect.ImpactMedium,
AndroidPredefinedEffect.Click);
Note: Only avaibale on iOS 13+ and Android 10+ (with API 30+) devices, also some android predefined effects are not available on some android phone brands.
The following predefined haptics are available:
iOSPredefinedEffect.NotificationError
– Error
feedback
iOSPredefinedEffect.NotificationSuccess
– Success
confirmation
iOSPredefinedEffect.NotificationWarning
– Warning
alert
iOSPredefinedEffect.ImpactLight
– Gentle physical
bump
iOSPredefinedEffect.ImpactMedium
– Moderate physical
bump
iOSPredefinedEffect.ImpactHeavy
– Strong physical
bump
iOSPredefinedEffect.ImpactSoft
– Light and soft
feedback (iOS 13+)
iOSPredefinedEffect.ImpactRigid
– Firm and crisp
feedback (iOS 13+)
iOSPredefinedEffect.SelectionFeedback
– Selection
change tick
AndroidPredefinedEffect.Click
– Standard tap feedback
AndroidPredefinedEffect.DoubleClick
– Two quick taps
AndroidPredefinedEffect.Tick
– Very light feedback
AndroidPredefinedEffect.Thud
– Heavy short pulse
AndroidPredefinedEffect.Pop
– Soft but sharp feedback
AndroidPredefinedEffect.HeavyClick
– Strong and long
tap
AndroidPredefinedEffect.TextureTick
– Repeating
micro-texture feel
Play a flat envelope with constant intensity and sharpness:
HapticInfo info = Hapthicks.PlayFlat(duration: 0.3f, intensity: 0.9f, sharpness: 0.5f);
This plays a simple vibration with the specified duration, intensity and sharpness.
Get your HapticInfo as a return value, you can later use it to stop the haptic.
Note: Sharpness is ignored on Android and only used for iOS.
A quick helper method for single-tap-style feedback:
HapticInfo info = Hapthicks.PlaySimpleTap(intensity: 1f, sharpness: 1f);
This generates a short burst (~50ms) haptic, useful for buttons or UI taps.
Get your HapticInfo as a return value, you can later use it to stop the haptic.
Note: Sharpness is ignored on Android and only used for iOS.
To play authored haptic patterns created in the Hapthick Editor:
TextAsset hapthickFile = Resources.Load<TextAsset>("MyHaptic");
IOSTransientFilter iosTransientFilter = new IOSTransientFilter(0.35f, 0.25f, 0.8f);
HapticInfo info = Hapthicks.PlayHapthick(hapthickFile, iosTransientFilter);
Select your .hapthick file from your assets as a TextAsset and pass it to PlayHapthick method to play it.
Get your HapticInfo as a return value, you can later use it to stop the haptic.
Note: The iosTransientFilter
parameter is
optional and can be used to filter out transient peaks on iOS.
You can hook into haptic lifecycle events via:
Hapthicks.OnHapticStarted += (HapticInfo info) =>
{
Debug.Log("Haptic started at time: " + info.startTime);
Debug.Log("Duration: " + info.duration + "s");
};
Hapthicks.OnHapticEnded += (HapticInfo info) =>
{
Debug.Log("Haptic ended at time: " + info.endTime);
};
These callbacks provide access to a HapticInfo
object,
which contains timing, duration, and metadata about the haptic
playback. You can use this to log, debug, or trigger actions based
on playback state.
Note: Because the haptic event system uses
System.Timers
, the events are fired from a background
thread, not the Unity main thread. This means you cannot directly
modify Unity objects (e.g., UI, GameObjects) from within these
callbacks. To safely perform Unity-related actions, set a flag
(e.g., a bool
) inside the event and then handle it
inside your Update()
method on the main thread. This
ensures Unity APIs are called from the correct context and avoids
potential errors or crashes or silent failures.
If you need to manually stop a haptic effect:
HapticInfo info = Hapthicks.PlayFlat(1f, 1f, 0.5f);
...
Hapthicks.StopHaptic(info);
You can pass the HapticInfo
object returned from any
haptic playback method to StopHaptic()
. This will
immediately stop the haptic effect.
In Hapthick Tab, you can scan the QR code generated by the Hapthick Editor to quickly add your Hapthick files or you can import your Hapthick files from your device storage.
Once you have your Hapthick files, you can play them by tapping on the file Play Button next to the file name.
You can Remove them from your Hapthick app by tapping on Delete Button or share them by tapping on Share Button.
For a Quick Code Implementing Help, you can tap on the Help Button to open the code snippet that shows how to play Hapthick files in your Unity project.
In this tab you can play predefined haptic effects on your device. which are Android and iOS native haptic effects.
For a Quick Code Implementing Help, you can tap on the Help Button to open the code snippet that shows how to play Predefined / UIKit in your Unity project.
Note: Only avaibale on iOS 13+ and Android 10+ (with API 30+) devices, also some android predefined effects are not available on some android phone brands.
in this tab you can either enter the duration or use No Duration (Simple Tap) which will play a simple tap vibration, you can also set the intensity and sharpness (iOS only) of the vibration.
For a Quick Code Implementing Help, you can tap on the Help Button to open the code snippet that shows how to play Flat Haptics and Simple Tap Haptics in your Unity project.
When you play a Hapthick file or a Flat Haptic, Now Playing section, You can simply Tap on it or Drag it to the top of the screen to open the Now Playing section in full size.
In the Now Playing section, you can see the playing haptics with their remaining duration and you can stop any of current playing haptics just by tapping on Stop Button next to them.
Hapthicks respects your privacy. This app does not collect, store, or transmit any personal data.
The app uses the following device features solely for functional purposes:
No data is collected, logged, or transmitted to any server. All operations occur locally on your device unless you explicitly choose to download a file via QR code.
Hapthicks does not track users, does not use analytics, and does not request or store any personal information.