Get Hand Bone Position
Updated: Nov 6, 2025
In this tutorial, you learn how to get the current world space position of a hand bone in Interaction SDK. Hands in Interaction SDK consist of multiple bones. The enum HandJointId in the HandPrimitives script lists all of the bones in each hand. Since fingers have multiple bones, the bones use a number suffix. The number suffix increases the closer the bone is to the end of the finger. For example, the HandThumb0 bone is at the root of the thumb, whereas HandThumb3 is at the end of the thumb.
Open your Unity scene.
Under Project, search for HandPrimitives.
The HandPrimitives script appears.
Open the HandPrimitives script and choose a bone from the enum HandJointId.
Create script to call GetJointPose
GetJointPose is one of multiple methods provided by the IHand interface. It returns the world space transform of a given bone. You can access IHand in your project by referencing a GameObject that implements IHand, like HandDataLeft, HandDataRight, LeftHand, or RightHand.
Under Project, in Assets > Scripts (or wherever you store your custom scripts), create a new script called LogBoneLocation.
Open the LogBoneLocation script and paste this code.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using Oculus.Interaction.Input;
public class LogBoneLocation : MonoBehaviour
{
[SerializeField]
private Hand hand;
private Pose currentPose;
private HandJointId handJointId = HandJointId.HandIndex3; // TO DO: Change this to your bone.
void Update()
{
hand.GetJointPose(handJointId, out currentPose);
}
}
In the pasted code, change the value of HandJointId handJointId to the bone you want to track.
Add your own logic to access currentPose, which contains the current world transform of the selected bone.