<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Acharad</title>
    <description>The latest articles on DEV Community by Acharad (@acharad).</description>
    <link>https://dev.to/acharad</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4059484%2F97fbd9d9-cdbc-4133-9e09-b9c7fb27ab2a.jpg</url>
      <title>DEV Community: Acharad</title>
      <link>https://dev.to/acharad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/acharad"/>
    <language>en</language>
    <item>
      <title>RichHaptic — An Open-Source Haptics Package for Unity (iOS + Android)</title>
      <dc:creator>Acharad</dc:creator>
      <pubDate>Sun, 02 Aug 2026 20:03:17 +0000</pubDate>
      <link>https://dev.to/acharad/richhaptic-an-open-source-haptics-package-for-unity-ios-android-804</link>
      <guid>https://dev.to/acharad/richhaptic-an-open-source-haptics-package-for-unity-ios-android-804</guid>
      <description>&lt;p&gt;I was looking for a solid open-source haptics package for Unity and couldn't really find one still being maintained. Nice Vibrations used to be the go-to for this, so I decided to build my own, inspired by it.&lt;/p&gt;

&lt;p&gt;The result is &lt;strong&gt;RichHaptic&lt;/strong&gt;: a zero-dependency Unity package that talks to Core Haptics on iOS and &lt;code&gt;VibrationEffect&lt;/code&gt; on Android directly. No compiled native binary, no third-party runtime — the whole native surface is one &lt;code&gt;.mm&lt;/code&gt; file plus some JNI calls you can read yourself.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Acharad" rel="noopener noreferrer"&gt;
        Acharad
      &lt;/a&gt; / &lt;a href="https://github.com/Acharad/RichHaptic" rel="noopener noreferrer"&gt;
        RichHaptic
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Unity haptics for iOS and Android with live modulation. Talks to Core Haptics and VibrationEffect directly — no native binaries, no dependencies.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;RichHaptic&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://openupm.com/packages/com.acharad.richhaptic/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f66f4ab3ae9d9b911a88f2bc3a29a545de3494490df79278e728014160e86373/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f636f6d2e616368617261642e726963686861707469633f6c6162656c3d6f70656e75706d2672656769737472795f7572693d68747470733a2f2f7061636b6167652e6f70656e75706d2e636f6d" alt="openupm"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Acharad/RichHaptic/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2577f87e0192c38003746f45deadefa31259d2076ce8d23ceb345955e50529c6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f756e6974792d363030302e332b2d3030302e737667"&gt;&lt;img src="https://camo.githubusercontent.com/2577f87e0192c38003746f45deadefa31259d2076ce8d23ceb345955e50529c6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f756e6974792d363030302e332b2d3030302e737667" alt="Unity 6000.3+"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A haptics package for Unity that talks to Core Haptics and &lt;code&gt;VibrationEffect&lt;/code&gt; directly. No compiled native blob, no third-party runtime, no dependencies — not even TextMeshPro in the core assembly.&lt;/p&gt;
&lt;p&gt;The thing it is built around is &lt;strong&gt;continuous feedback you can modulate while it plays&lt;/strong&gt;: a bowstring that tightens under your finger, an engine that revs with the throttle. Most free haptics packages only fire preset taps. This one does that too, but the live path is the reason it exists.&lt;/p&gt;
&lt;p&gt;It deliberately does not do gamepad rumble, looping, seeking, or ship a library of authored clips. If you need those, see the comparison near the bottom.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Via &lt;a href="https://openupm.com/packages/com.acharad.richhaptic/" rel="nofollow noopener noreferrer"&gt;OpenUPM&lt;/a&gt;:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;openupm add com.acharad.richhaptic
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Or Package Manager → &lt;strong&gt;Add package from git URL&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;https://github.com/Acharad/RichHaptic.git?path=src/RichHaptic/Assets/RichHaptic
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A demo scene comes with it as an optional sample, imported from the package's page in Package Manager. It needs TextMeshPro, which ships…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Acharad/RichHaptic" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Everything goes through one static class, no setup needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;RichHaptic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;Haptics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PlayPreset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PresetType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Success&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Presets&lt;/strong&gt; — nine of them (Selection, Success, Warning, Failure, five impact levels). On iOS these call the system's own feedback generators, so they feel native and stay right as Apple retunes them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous feedback&lt;/strong&gt; — start a session, push new intensity/sharpness values into it every frame, stop it when you're done. Useful for things like a drawing gesture or a charge-up. Live and gapless on iOS; on Android it's coalesced into ~150ms updates since the platform has no live-modulation handle, only "play" and "cancel."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clips&lt;/strong&gt; — a &lt;code&gt;ScriptableObject&lt;/code&gt; you edit in the Inspector, a simple event list with intensity/sharpness per event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Priority&lt;/strong&gt; — one actuator, many callers; lower priority number wins, same convention as &lt;code&gt;AudioSource.priority&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A couple of things worth knowing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Android doesn't let you loop a vibration reliably — I found this out the hard way on a Galaxy A54, where a repeating waveform silently truncated to just the first segment. Both platforms now just run one long segment and stop it early instead of relying on native looping.&lt;/li&gt;
&lt;li&gt;iOS presets don't use hardcoded amplitude values at all — they call UIKit's feedback generators directly, since Apple tunes those per device and a fixed number can't match that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's pre-1.0 (0.1.0), 143 EditMode tests, verified by hand on an iPhone 15 Pro and a Galaxy A54. If you're doing anything with continuous haptic feedback in a Unity project, take a look — feedback and device reports are very welcome.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
