Introduction

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.

About Hapthicks

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.

Technology

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.

Platform Notes

  • iOS: Sharpness and waveform timing are fully supported via Core Haptics.
  • Android: Sharpness is always ignored on Android. Amplitude control requires Android 8.0+ (API 26) and hardware support. Many low-end devices only support simple on/off vibrations.
  • Editor: Vibration playback is disabled in Unity Editor for safety.
  • WebGL: Not supported (no native vibration APIs).

Getting Started

Install Hapthicks from the Unity Asset Store

Hapthicks is available on the Unity Asset Store for quick installation and updates.
Follow these steps to add Hapthicks to your project:

  1. Open your Unity project.
  2. Go to Window > Asset Store (or open the Asset Store in your web browser).
  3. Search for "Hapthicks" in the Asset Store search bar.
  4. Click the Download or Purchase button, then Import the package into your project.
  5. Once imported, Hapthicks is ready to use—no extra setup required!

Open the Hapthick Editor Window in Unity

The Hapthick Editor lets you design, preview, and export haptic feedback assets right inside the Unity Editor.
To open the editor:

  1. In the Unity menu bar, go to Tools > Hapthick Editor.
  2. The Hapthick Editor window will appear. Here you can create new .hapthick files, edit curves, generate waveforms, and more.
  3. For more detailed usage instructions, read the documentation.

Tip: You can dock the Hapthick Editor window anywhere in the Unity Editor for a smoother workflow.

Which Files to Keep in Your Project

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: All scripts inside the Editor folder are essential for Hapthick Editor and supporting .hapthick files:
    • Editor/HapthickAssetPostProcessor.cs
    • Editor/HapthickEditor.cs
    • Editor/HapthickImporter.cs
    • Editor/HapthickScriptedImporter.cs
    • Editor/HapthickInspector.cs
  • Runtime: All scripts inside the Runtime folder are essential for playback:
    • Runtime/AhapGenerator.cs
    • Runtime/HapticEngineLifecycle.cs
    • Runtime/Hapthicks.cs
    • Runtime/HapticSharedData.cs
  • Plugins: Required for platform-native haptics:
    • Plugins/iOS/HapticBridge.mm
    • Plugins/iOS/HapticBridge.h
    • Plugins/Android/AndroidManifest.xml
  • Resources: Required for Icons inside Hapthick Editor:
    • 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.

Install the Companion App (Optional, for Testing on Device)

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:

  1. Open the App Store (iOS) or Google Play (Android) on your mobile device.
  2. Search for "Hapthicks" or use following links:
  3. App Store
    Google Play
  4. Download and install the app.
  5. Launch the app, and scan the QR code exported from the Hapthick Editor to instantly test your custom haptics.

Note: Make sure your device supports advanced haptic feedback (iPhone 8 or newer, Android 8.0+ recommended).

Hapthick Editor

Create and Open Hapthick

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.

Import .ahap files

.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:

  1. In the Hapthick Editor, click the Create from AHAP files.
  2. Select the your contin .ahap file you want to import from your file system.
  3. The imported haptic pattern will be converted into a Hapthick asset and added to your project.

Audio Section

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.

  • Clip: Assign a Unity AudioClip from your project. This sound will be analyzed for waveform and curve generation.
  • Waveform Detail: Adjusts the sampling density for the waveform. Higher values produce more precise waveforms but may take longer to compute.
  • Show Audio Waveform: Enables a visual overlay of the audio waveform beneath the intensity/sharpness curves in the editor.
  • Generate Audio Waveform: Extracts amplitude data from the AudioClip and generates a waveform preview.

Advanced Settings

The advanced settings provide fine control over the resolution of the waveform envelope that is extracted from the AudioClip.

  • Min Point Count: The minimum number of amplitude samples to extract from the AudioClip, regardless of clip length or detail setting. This ensures the waveform is not too sparse for short audio.
  • Max Point Count: The maximum number of samples allowed for long audio clips, capping performance overhead.
  • Reset Value: Resets the field to its default value (300 for Min, 3000 for Max).

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.

Waveform & Curve Generation

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:

  • Curve Resolution: Controls simplification during curve generation using the Ramer–Douglas–Peucker (RDP) algorithm. A higher value preserves more waveform detail in the curve.
  • Intensity Max: Scales the amplitude values from the waveform envelope to control how strong the resulting vibrations will be.
  • Generate Intensity Curve (From AudioClip): Converts the waveform into a haptic intensity curve by applying normalization and point simplification.
  • Sharpness Baseline: Sets the minimum sharpness applied when generating the sharpness curve.
  • Sharpness Max: Sets the upper bound of sharpness values.
  • Generate Sharpness Curve (From Intensity): Converts intensity values into a sharpness curve by applying a linear mapping between the Baseline and Max values.

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.

Haptic Properties

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

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 (Android)

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).

Sharpness Settings (iOS Only)

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:

  • Curve: Allows custom control over the sharpness timeline. You can edit it using the visual curve editor, just like intensity.
  • Constant: Applies a single sharpness value across the entire haptic duration. This is useful when your intensity curve varies but you want a uniform texture.

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.

Saving and Exporting

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.

  • Reset: Clears all current curve data and resets settings to defaults. Useful when starting fresh.
  • Save: Saves your .hapthick file to the current file path. If no path is set, you’ll be prompted to choose one.
  • Save As: Prompts you to save a new copy of the file with a different name or location.
  • QR Code: Uploads your current hapthick file to Uploadcare and displays a QR code that can be scanned using the Hapthick Mobile App.

AHAP Export (iOS only)

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.

  • Export Mode: Choose between Continuous Only (single AHAP file with haptic intensity/sharpness curves) or With Transients (two AHAP files: continuous + transient peaks).
  • Export as .AHAP: Initiates the export process and saves the resulting file(s) to your local system.

If With Transients mode is selected, additional parameters will be used to identify and extract transients for separate export. These include:

  • PEAK_I – Minimum intensity required for a point to be considered a peak. If a sample's intensity is equal to or higher than this value, it's a candidate for transient export.
  • VALLEY_I – Maximum intensity allowed for both neighboring points to qualify them as valleys. This ensures the peak is isolated and not part of a broader wave.
  • SHARP_HI – Minimum sharpness required for a point to count as a transient. This ensures only snappy or crisp events are extracted.

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.

Playing Haptics

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.

Play Predefined System Haptics

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:

iOS Predefined Effects (UIKit / Core Haptics)

  • 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

Android Predefined Effects (API 30+ and Android 10+)

  • 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 Flat Haptics

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.

Play Simple Tap

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.

Play Custom Hapthick Files

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.

Listening to Haptic Events

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.

Stopping a Playing Haptic

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.

Companion App

Hapthick Tab

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.

Predefined / UIKIt Tab

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.

Flat Tab

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.

Now Playing Section

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 Privacy Policy

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:

  • Vibration: Used to play haptic feedback patterns on your device.
  • Camera: Accessed only for scanning QR codes to import Hapthick files.
  • File Access: Used to select and import .hapthick files from your device storage.
  • Internet: Used to download .hapthick files after scanning a QR code, or for cloud-based features like sharing.

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.