UHandTrackingFilterComponentOculusHandTools (with 5 C++ modules) and OculusUtils. For detailed build and configuration steps, see the project README.| Feature | What it demonstrates | Key concepts |
|---|---|---|
Teleportation | Hand-tracked locomotion via pointing and confirming | Pose-based activation, arc preview |
Grabbing with pose override | Grasping objects with custom hand poses | Grab detection, pose blending |
Throwing | Physics-based throwing with velocity estimation | UThrowingComponent, multi-tier velocity confidence |
Button pushing | Near-field interaction with pressable surfaces | UContinuousOverlapSphereComponent, fingertip collision |
Punching | Impact detection using hand velocity | Velocity thresholds, collision events |
Two-handed aiming | Bimanual aim mechanics | Dual-hand pose coordination |
Hand pose recognition | Static pose matching using bone rotations | UHandPoseRecognizer, 18-bone matching, confidence scoring |
Gesture recognition | Multi-pose sequence detection | UHandGestureRecognizer, state machine transitions |
UHandPoseRecognizer encodes rotations using a compact string format with pitch, yaw, and roll values, then calculates a confidence score using the ErrorAtMaxConfidence threshold. UContinuousOverlapSphereComponent prevents fingertip pass-through during button pushing by maintaining collision detection every frame. UHandTrackingFilterComponent smooths hand position during brief tracking loss events.UHandPoseRecognizer matches the current hand skeleton against stored pose data by comparing bone rotations across 18 bones. Poses are encoded using a compact string representation that stores pitch, yaw, and roll per bone:// Confidence is calculated based on rotation error distance // ErrorAtMaxConfidence defines the threshold where confidence reaches 1.0 float Confidence = FMath::Clamp(1.0f - (Error / ErrorAtMaxConfidence), 0.0f, 1.0f);
UHandGestureRecognizer detects multi-pose sequences by running a state machine that tracks which poses have been recognized in order. Each gesture defines a sequence of required poses with timing constraints.UContinuousOverlapSphereComponent maintains per-frame overlap checks at fingertip positions to prevent fast-moving fingers from passing through thin interactive surfaces like buttons.UHandTrackingFilterComponent detects when hand tracking is lost and holds the last known hand position with decay, preventing sudden jumps when tracking resumes.UHandGestureRecognizer.