XR Hand Skeleton Driver
The XRHandSkeletonDriver component manages the Transform components of each joint in the hand skeleton.
The component subscribes to events from a XRHandTrackingEvents component and updates the joint transforms when the joints and root pose are updated.
To set up the joints for a standard hand skeleton, you can assign the Root Transform and then select the Find Joints button in the Inspector window to automatically find the joints in the hierarchy.
The Find Joints button will use the name of the child GameObjects of the Root Transform and match the joint name with the end of the GameObject name

The standard hierarchy of named joints in a right hand skeleton.
The skeleton driver will work for any hierarchy of joints that matches the following structure:
- The top joint is the
Wrist
- The direct child GameObjects of the
Wrist
contains the Palm
, and the first joint of all fingers.
- The
Index
, Middle
, Ring
, and Little
fingers each have a chain of successive joints for Metacarpal
, Proximal
, Intermediate
, Distal
, and Tip
.
- The
Thumb
finger has the same joints as the other fingers except it has no Intermediate
joint.
The parent structure is important to the skeleton driver because the pose for each joint is relative to the parent joint.
Not every joint is required to be included, but if a joint is included, it should also include all its parents.
For example, you can ignore an entire finger by not including the Metacarpal
joint and its child GameObjects, but if you include the Proximal
joint, you must also include the Metacarpal
joint as its parent.
XR Hand Mesh Controller
The XRHandMeshController component subscribes to events from a XRHandTrackingEvents component and can enable and disable a Mesh Renderer component for the hand when tracking is acquired and lost.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.