BeaVR Unity Project

September 29, 2025 Β· View on GitHub

Unity 6.2 | OpenXR | XR Hands


πŸ“ Project Structure

Assets/
β”œβ”€β”€ Scripts/
β”‚   β”œβ”€β”€ Gesture Detection/
β”‚   β”‚   └── GestureDetectorXR.cs       # Hand tracking & pinch detection
β”‚   β”œβ”€β”€ Network/
β”‚   β”‚   └── NetMQController.cs         # NetMQ messaging
β”‚   β”œβ”€β”€ NetworkManager.cs              # Network config
β”‚   β”œβ”€β”€ UI/                            # IP input, canvas switching
β”‚   β”œβ”€β”€ Camera Stream Scripts/
β”‚   β”‚   └── CameraOneStreamer.cs       # Receive camera feed
β”‚   └── GraphStream.cs                 # Receive graph data
β”‚
└── Resources/Configurations/
    └── Network.json                   # IP addresses & ports

πŸ”„ Data Flow

XR Hands Subsystem
       ↓
GestureDetectorXR (26 joints/hand)
       ↓
NetMQController.SendMessage()
       ↓
   [Network]  ←─────────────┐
       ↓                    β”‚
   Server              CameraOneStreamer
                       GraphStream

Message Format: "x,y,z,x,y,z,..." (78 floats per hand)


Core Components

ComponentPurpose
GestureDetectorXR.csXR Hands tracking β†’ NetMQ
NetMQController.csZeroMQ pub/sub messaging
NetworkManager.csLoad Network.json config
CameraOneStreamer.csReceive & display camera
GraphStream.csReceive & display graphs

Hand Joint Order (XR Hands)

0:Wrist  1:Palm
2-6:   Thumb (Metacarpal→Tip)
7-11:  Index
12-16: Middle
17-21: Ring
22-26: Little

βš™οΈ Unity Setup

Required Packages

  • XR Plugin Management
  • XR Hands (v1.6.1)
  • XR Interaction Toolkit
  • NetMQ 4.0.2.1 (NuGet)

Project Settings

XR Plug-in Management β†’ OpenXR
  βœ“ OpenXR provider
  βœ“ Meta XR Hand Tracking Aim

Scene Requirements

XR Origin (XR Rig)
  β”œβ”€β”€ Camera Offset
  β”‚   └── Main Camera
  └── [Controllers/Hands]

EventSystem
  └── XR UI Input Module

Canvas (World Space)
  └── Tracked Device Graphic Raycaster

Building for Quest

SettingValue
PlatformAndroid
Scripting BackendIL2CPP
Target API Level32+
Texture CompressionASTC
XR ProviderOpenXR (Android tab)

Build: File β†’ Build Settings β†’ Build and Run


Troubleshooting

Common Issues:

  • NuGet packages not loading: Reinstall NuGet packages (NetMQ, AsyncIO, NaCl.Net)
  • Hand tracking not working: Enable OpenXR Hand Tracking Subsystem in Project Settings
  • Build settings: Platform (Android) and Target API Level (32+) are already configured

πŸ“¦ Dependencies

NuGet (in Assets/Packages/):

  • NetMQ 4.0.2.1
  • AsyncIO 0.1.69
  • NaCl.Net 0.1.13

Unity:

  • XR Hands (1.6.1)
  • XR Interaction Toolkit
  • TextMesh Pro

OVR vs OpenXR

This project uses OpenXR with Meta XR Interaction building blocks instead of the legacy Oculus Integration SDK.

Key Differences:

  • Hand Tracking: XR Hands provides 26 joints per hand vs OVR's bone structure
  • Joint Order: Different ordering - ensure receiver code matches XR Hands format (see above)
  • Scene Setup: Uses Meta XR Interaction building blocks for camera rig and UI interaction

License

MIT License