Microtube 文档
EN中文
开发者 / Unity / 场景设置

Unity 场景设置

在场景中添加手部和 HEXR 装置(rig),并连接手套。

HEXR 场景需要什么

场景共需四样东西。手部由你的 XR SDK 提供,其余部分用 HexR → Create HexR Rig 一次性添加。

场景内容作用添加方式
被追踪的手提供手的位置。HEXR 会在每个指尖和手掌上放置一个触点,从而知道哪根手指碰到了什么由你的 XR SDK 提供,见下方步骤
HexR Main装置本体。其中的 HexRManager 负责连接两只手套,每只手套各对应一个 Hand Physics 对象,用于保持该手套的蓝牙连接。切换场景时它会保留下来Create HexR Rig
左右两个 Pressure Controller(压力控制器)所有触觉反馈都经由它们发出。场景中如果没有一对处于启用状态的 Pressure Controller,就感觉不到任何触觉Create HexR Rig,或 HexR → Add Pressure Controller
HexR 菜单头显中用于连接手套的面板,见下文Create HexR Rig,或 HexR → Add HexR Menu

新建场景

最快的方法:HexR → Create Demo Scene 会生成一个可直接试用的场景,包含装置、一个触觉球体和一个可抓取的立方体。它无法添加手部,因此请先完成下方第 1 步,再运行 HexR → Troubleshoot → Re-run Auto Setup。

也可以自己搭建:

  1. 添加手部

    HEXR 会挂接到场景中已有的手部上,不会自行创建手部。请添加一个会把手部放进 Hierarchy 的装置:

    后端需要添加
    Meta OVRMeta → Tools → Building Blocks → Interactions Rig。不要用 Hand Tracking 模块:它的手部要到应用运行后才会出现,对 HEXR 来说为时已晚
    OpenXR 或 PICO在 Window → Package Manager → XR Interaction Toolkit → Samples 中导入 Hands Interaction Demo,并将其中的 XR Origin Hands (XR Rig) 预制体拖入场景。删除场景中的 Main Camera,因为该装置自带相机

    检查:在 Hierarchy 中搜索 OpenXRLeftHand(Meta)或 L_Wrist(OpenXR)。如果搜不到,说明场景中还没有手部。

  2. 添加 HEXR 装置

    运行 HexR → Create HexR Rig → 你的后端。它会添加 HexR Main 和 Pressure Controller(压力控制器),然后运行 Auto Setup,在手部放置触点。

  3. 验证

    运行 HexR → Troubleshoot → Validate Scene Setup,并修复它列出的所有问题。它能发现那些原本会被误以为是手套故障的错误。

  4. 连接手套

    打开手臂模块电源。在头显构建版本中,点击 HexR 菜单上的 Connect Left Glove 或 Connect Right Glove。在 Windows 上的 Unity Editor 中,点击 Play,然后通过 HexR → HexR Tools → HexR Haptics Tester 连接。首次在头显上运行时,请允许蓝牙权限,见在头显上允许蓝牙。

如果 Auto Setup 找不到某些对象

将 HEXR 添加到现有项目

  1. 安装插件包

    按照项目设置操作。请通过 git URL 安装,不要从教程项目中复制 HEXR 文件夹,否则会产生重复代码并导致编译错误。要从旧版 HEXR 升级?请先阅读更新日志。

  2. 检查手部

    HEXR 通过关节名称查找装置中的手部,因此手部必须来自 Meta 的 Interaction SDK 或 Unity 的 XR Hands(名称见 HEXR 场景)。在 Hierarchy 中搜索 OpenXRLeftHand(Meta)或 L_Wrist(OpenXR)。搜不到?说明你的手部要到应用运行后才会出现,见新建场景的第 1 步。

  3. 将装置添加到应用的启动场景

    运行 HexR → Create HexR Rig → 你的后端。它会添加 HexR Main 和 Pressure Controller(压力控制器),Auto Setup 会在你现有的手部上放置触点,并连接好你的抓取和戳按交互器。你的相机装置、手部和对象都保持不变。然后运行 HexR → Troubleshoot → Validate Scene Setup。

  4. 为其他每个场景添加 Pressure Controller

    加载新场景时,HexR Main 会被保留,并自动找到该场景中的手部;但每个场景都需要自己的一对 Pressure Controller(压力控制器):在每个场景中运行 HexR → Add Pressure Controller。

  5. 让对象产生触感

    将 HexRInteractableHaptics 添加到已有的可交互组件旁边:OpenXR 上是 XR Grab Interactable,Meta 上是 Grabbable 和 Hand Grab Interactable。其他情况请参阅我需要哪个组件?

在头显中悬浮显示的面板,主要用于通过蓝牙连接手套。它随装置一起提供,位于用户左侧并朝向用户;用真实的指尖按下它的按钮即可。要将它添加到你自己的场景中,请使用 HexR → Add HexR Menu。

HexR 菜单顶部:GLOVES 和 VIEW 两个区域
HexR 菜单顶部。GLOVES 用于连接各只手套;VIEW 用于显示触点。
菜单项作用
Connect Left Glove / Connect Right Glove连接对应的手套,就绪后显示其电量。再次点击即可断开连接
Show Colliders在被追踪的手上绘制所有触点,方便你确认它们跟随手指移动
HAPTICS实时显示最近发送到每只手套各手指和手掌的内容
场景切换器在各场景和演示之间切换

改用你自己的菜单

HexR 菜单并非必需。从 SDK 0.9.4 起,HEXR 不依赖该菜单也能工作,因此你可以通过自己的按钮或直接在代码中连接,不必使用它。以下是相关调用,均位于 HexRManager.Instance 上:

csharp
HexRManager rig = HexRManager.Instance;
var left = HaptGloveHandler.HandType.Left;   // or HandType.Right

rig.Connect(left);       // connect; asks for Bluetooth permission where needed,
                         // does nothing if already connected or connecting
rig.Disconnect(left);    // release the glove, then disconnect

bool connected  = rig.IsConnected(left);
bool connecting = rig.IsConnecting(left);        // includes waiting for permission or a retry
float battery   = rig.leftHand.GetBatteryLevel();   // 0-1, once connected

一个现成的脚本,供你自己的按钮使用。将它挂到任意对象上,把每个 UI Button 的 On Click () 指向它的四个方法之一,再把 Status Changed 连接到一个文本字段,即可显示当前状态。

csharp
using UnityEngine;
using UnityEngine.Events;
using HaptGlove;
using HexR;

// Connect buttons of your own, instead of the HexR menu. Point each UI Button's
// On Click () at one of the four methods, and wire Status Changed to a text field.
public class GloveButtons : MonoBehaviour
{
    public UnityEvent<string> statusChanged;

    public void ConnectLeft()     => HexRManager.Instance.Connect(HaptGloveHandler.HandType.Left);
    public void ConnectRight()    => HexRManager.Instance.Connect(HaptGloveHandler.HandType.Right);
    public void DisconnectLeft()  => HexRManager.Instance.Disconnect(HaptGloveHandler.HandType.Left);
    public void DisconnectRight() => HexRManager.Instance.Disconnect(HaptGloveHandler.HandType.Right);

    void Start()
    {
        HexRManager rig = HexRManager.Instance;
        rig.leftHand.onBluetoothConnected += OnConnected;
        rig.rightHand.onBluetoothConnected += OnConnected;
        rig.leftHand.onBluetoothDisconnected += OnDisconnected;
        rig.rightHand.onBluetoothDisconnected += OnDisconnected;
    }

    void OnDestroy()
    {
        HexRManager rig = HexRManager.Instance;
        if (rig == null) return;
        rig.leftHand.onBluetoothConnected -= OnConnected;
        rig.rightHand.onBluetoothConnected -= OnConnected;
        rig.leftHand.onBluetoothDisconnected -= OnDisconnected;
        rig.rightHand.onBluetoothDisconnected -= OnDisconnected;
    }

    void OnConnected(HaptGloveHandler.HandType hand)    => statusChanged.Invoke(hand + " glove connected");
    void OnDisconnected(HaptGloveHandler.HandType hand) => statusChanged.Invoke(hand + " glove disconnected");
}
在 Unity Editor 中

请改为通过 HexR → HexR Tools → HexR Haptics Tester 连接。Connect 使用每只手套的 Build Platform 设置,装置默认将其设为 Android;Tester 会在 Play 模式下将它切换为 Windows。

如需在场景启动时立即连接、完全不用按钮,请参阅通过代码连接两只手套。所有连接事件都列在事件中。

将应用安装到头显

可以直接从 Unity 构建,也可以安装 APK 文件。无论哪种方式,都需要先在头显上开启开发者模式。

开启开发者模式

每台头显只需设置一次。

头显操作方法
Meta Quest在手机上的 Meta Horizon 应用中,打开头显的设置并开启 Developer Mode。Meta 可能会要求你先注册一个免费的开发者账号
PICO在头显上进入 Settings → General → About,连续点击软件版本号,直到出现开发者选项,然后开启 Settings → Developer → USB Debugging

然后用 USB 线将头显连接到电脑,并在头显中接受 Allow USB debugging 提示。

从 Unity 安装

在头显已连接的情况下,进入 File → Build Profiles → Android → Switch Platform,然后点击 Build And Run。Unity 会安装并启动应用。如果想得到一个可分享的 APK 文件,请改为点击 Build。

从 APK 文件安装

shell
adb install -r YourApp.apk

在头显上找到应用:以这种方式安装的应用不会和商店应用放在一起。在 Quest 上,打开应用库并选择 Unknown Sources;在 PICO 上,请在资源库(Library)的未知来源筛选中查找。

在头显上允许蓝牙

应用首次连接手套时,头显会请求蓝牙使用权限。请允许。如果拒绝,应用会继续运行,但始终找不到手套。HexR 菜单和 HexRManager.Instance.Connect(...) 都会自动为你请求该权限。

头显权限名称已拒绝?在此处开启
Meta Quest 2, 3, 3SNearby devices(附近的设备)Settings → Privacy and Security → App Permissions,然后重启应用
PICO 4, PICO 4 UltraPICO 4 上为 Location(位置信息);运行 Android 12 或更高版本的头显上为 Nearby devices(附近的设备)Settings → Apps → 你的应用 → Permissions,然后重启应用
手套无法连接?

请先检查此权限,再排查手套或项目。