GripCraft VR Interaction Framework
← All work

GripCraft VR Interaction Framework

Unity Asset Store / C# · OpenXR / 2026

The interaction framework underneath my VR work, packaged and released for other teams. Seven hand sets, pose authoring in the inspector, and an interactable model that does not assume what your game is.

Why not XR Interaction Toolkit

XRI is a reasonable default and I have shipped with it. The projects that led to this framework kept hitting the same wall. XRI has opinions about the interactable lifecycle, about when an object is selectable, who owns it during a grab, what happens when a second hand arrives. Those opinions get expensive to argue with once a game's mechanics depend on different answers.

GripCraft sits on OpenXR primitives instead. That costs more up front and buys back the ability to define the lifecycle the game actually needs, including the awkward cases: constrained interactables, multi-hand objects, and sockets that have to accept or reject a specific object mid-motion.

Hand poses as authored data

A hand that grips a pistol convincingly and a hand that grips a mug convincingly are different hands. Solving that procedurally is expensive, and it tends to be wrong in exactly the cases you care about, so the framework treats poses as data. A HandData asset holds the hand prefabs, per-finger avatar masks, the open and closed animation clips, and a list of custom poses authored per object.

Authoring happens in the inspector, in scene, with the hand visible and the fingers adjustable. The designer poses the hand on the object once and the framework constrains to it at runtime.

Authoring a custom hand pose in the inspector, in scene.
HandData: prefabs, per-finger masks, clips, and the custom pose list.

Sockets and constrained interactables

Most of what a VR game asks an object to do isn't "be picked up". It is go in this slot, rotate on this axis, slide along this rail, accept this specific other object and nothing else. The framework models these as first-class cases with their own lifecycle, instead of as special-case scripts bolted onto a generic grabbable, which is usually where interaction code starts to rot.

Interactable lifecycle and event wiring, configured in the inspector.
Pose constraints resolving against object geometry at runtime.
A constrained two-hand grip, the case generic grabbables handle worst.
Per-finger interaction: playable keys without a bespoke piano script.

Lineage

This is the third generation. The first was Kinteraction, shipped on the Asset Store from Kandooz Studio around 2019 and used by thousands of developers. That version taught me which parts of the design were wrong. The second is the internal Shababeek core system that Good Morning and our client work are built on. GripCraft is that system, hardened and documented for people who didn't write it.

Its data layer is also released separately as ReactiveVars.

Next

ReactiveVars