Inheritance #

OpenXRHand
Table of contents

OpenXRHand #

is_instantiable, Node3D, Node, core, not_builtin_classes

Node supporting hand and finger tracking in OpenXR.

This node enables OpenXR's hand tracking functionality. The node should be a child node of an XROrigin3D node, tracking will update its position to the player's tracked hand Palm joint location (the center of the middle finger's metacarpal bone). This node also updates the skeleton of a properly skinned hand or avatar model.

If the skeleton is a hand (one of the hand bones is the root node of the skeleton), then the skeleton will be placed relative to the hand palm location and the hand mesh and skeleton should be children of the OpenXRHand node.

If the hand bones are part of a full skeleton, then the root of the hand will keep its location with the assumption that IK is used to position the hand and arm.

By default the skeleton hand bones are repositioned to match the size of the tracked hand. To preserve the modeled bone sizes change bone_update to apply rotation only.

Members #

var bone_update = BONE_UPDATE_FULL#

Specify the type of updates to perform on the bone.

var hand = HAND_LEFT#

Specifies whether this node tracks the left or right hand of the player.

var hand_skeleton: NodePath = NodePath("")#

Set a Skeleton3D node for which the pose positions will be updated.

var motion_range = MOTION_RANGE_UNOBSTRUCTED#

Set the motion range (if supported) limiting the hand motion.

var skeleton_rig = SKELETON_RIG_OPENXR#

Set the type of skeleton rig the hand_skeleton is compliant with.

Methods #

Annotations #

Constants #

const HAND_LEFT = 0 enum Hands#

Tracking the player's left hand.

const HAND_RIGHT = 1 enum Hands#

Tracking the player's right hand.

const HAND_MAX = 2 enum Hands#

Maximum supported hands.

const MOTION_RANGE_UNOBSTRUCTED = 0 enum MotionRange#

When player grips, hand skeleton will form a full fist.

const MOTION_RANGE_CONFORM_TO_CONTROLLER = 1 enum MotionRange#

When player grips, hand skeleton conforms to the controller the player is holding.

const MOTION_RANGE_MAX = 2 enum MotionRange#

Maximum supported motion ranges.

const SKELETON_RIG_OPENXR = 0 enum SkeletonRig#

An OpenXR compliant skeleton.

const SKELETON_RIG_HUMANOID = 1 enum SkeletonRig#

A SkeletonProfileHumanoid compliant skeleton.

const SKELETON_RIG_MAX = 2 enum SkeletonRig#

Maximum supported hands.

const BONE_UPDATE_FULL = 0 enum BoneUpdate#

The skeletons bones are fully updated (both position and rotation) to match the tracked bones.

const BONE_UPDATE_ROTATION_ONLY = 1 enum BoneUpdate#

The skeletons bones are only rotated to align with the tracked bones, preserving bone length.

const BONE_UPDATE_MAX = 2 enum BoneUpdate#

Maximum supported bone update mode.

Constructors #

Enums #

Hands#

enum Hands { HAND_LEFT = 0, HAND_RIGHT = 1, HAND_MAX = 2, }

MotionRange#

enum MotionRange { MOTION_RANGE_UNOBSTRUCTED = 0, MOTION_RANGE_CONFORM_TO_CONTROLLER = 1, MOTION_RANGE_MAX = 2, }

SkeletonRig#

enum SkeletonRig { SKELETON_RIG_OPENXR = 0, SKELETON_RIG_HUMANOID = 1, SKELETON_RIG_MAX = 2, }

BoneUpdate#

enum BoneUpdate { BONE_UPDATE_FULL = 0, BONE_UPDATE_ROTATION_ONLY = 1, BONE_UPDATE_MAX = 2, }

Operators #

Signals #

Theme Items #

Tutorials #