Inverse Unity Package 入门指南
本指南介绍了基本配置,并通过一个简单示例演示了Haply Inverse Unity Package的基本用法,内容包括软件包的安装、力反馈测试台的搭建,以及创建简单的力与位置控制脚本。
如需了解详细信息和高级技巧,请浏览教程。
版本兼容性
- Unity 2021.3.x LTS:支持情况
- Unity 2022.1.x LTS:支持情况
- Unity 6000.x LTS:支持情况
- Haply Inverse SDK : 3.1.0 或更高版本
先决条件
- 请安装 Haply Inverse SDK,版本 3.1.0 或更高版本。
- 请确保Haply 反向服务处于运行状态。
- 在启动该场景之前,请确认您的Inverse3 和VerseGrip设备已连接并完成校准。
该软件包正在持续开发中,以进一步改进对Inverse3 的支持。如需帮助、反馈或提出请求,请联系我们。
安装
Inverse Unity 插件可通过Unity 的Scoped Registry获取。要集成该插件:
-
打开“编辑”>“项目设置”>“包管理器”。添加一个新的“范围注册表”,内容如下:
- 姓名:
Haply Robotics - 网址:
https://unitypackages.haply.co - 范围:
co.haply

- 姓名:
-
访问 窗口 > 软件包管理器, 请点击按钮 加上,然后选择 按名称添加软件包. 请输入
co.haply.inverse然后点击 添加.
安装成功后,包管理器将显示 Inverse 包。
触觉测试台的搭建
要创建一个触觉装置,请依次选择“GameObject” > “Haply Inverse” > “Haptic Rig(单手)”。 此操作将组装一个包含Inverse3 控制器和VerseGrip的完整环境。
您的场景现在将包含:
- 触觉设备映射器:通过Haply 逆向服务管理外设的分配。
- “触觉原点”:对触觉配置进行缩放并将其定位在场景中。
- 触觉控制器:根据外设数据控制光标的力量或位置 Inverse3 以及VerseGrip。
- 光标:包含用于在场景中显示的Inverse3 光标和VerseGrip光标组件。

有关该软件包中各组件的更多详细信息,请参阅整体架构的文档页面。
在“播放”模式下,球体将与光标同步移动和旋转 Inverse3 以及VerseGrip的朝向。


力控制模式
创建脚本 ForceControl.cs C#,并将其附加到 GameObject 上 触觉起源.
此脚本可让您对设备施加力 Inverse3 借助检查器中的滑块。
using Haply.Inverse;
using UnityEngine;
public class ForceControl : MonoBehaviour
{
[Range(-2, 2)]
public float forceX;
[Range(-2, 2)]
public float forceY;
[Range(-2, 2)]
public float forceZ;
private Inverse3 _inverse3;
private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}
protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.Release();
}
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalForce(new Vector3(forceX, forceY, forceZ));
}
}
脚本说明
-
forceX, Y, Z: 可通过滑块调节力向量的分量,确保力在传递至该方法之前始终保持在安全范围内CursorSetForce. 也可以使用一个字段Vector3标准。 -
Awake(): 获取该组件 Inverse3 从当前 GameObject 或其子对象之一开始。 -
OnEnable(): 录入回拨功能OnDeviceStateChanged在调用该方法后,由触觉更新引发,在单独的执行线程中Awake并且每当脚本被激活时。 -
OnDisable(): 当脚本被禁用或应用程序退出时,取消注册回调函数并重置力值。 -
OnDeviceStateChanged: 获取向量force从“检查器”窗口中,并将它传递到 Inverse3 通过该方法CursorSetForce.重要提示:回调函数由高频触觉执行线程触发,频率范围为1kHz至8kHz。 必须确保该回调函数中的所有代码都经过高度优化。
利用率
进入播放模式前,请确保按住光标键。设备应切换至“力控”状态,此时绿色指示灯会亮起。 随后,您可以通过滑块调节输出力度,从而探索设备的工作空间。
调整力值会使Inverse3 发生移动。请确保工作区域畅通无阻,并始终握住光标。 有关安全须知,请参阅《安全使用指南》一文。

位置控制方式
同样,请创建一个脚本 PositionControl.cs 使用 C# 控制设备的的位置,并将其附加到 GameObject 上 触觉起源.
using Haply.Inverse;
using UnityEngine;
public class PositionControl : MonoBehaviour
{
[Range(-0.1f, 0.1f)]
public float positionX;
[Range(-0.1f, 0.1f)]
public float positionY;
[Range(-0.1f, 0.1f)]
public float positionZ;
private Inverse3 _inverse3;
private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}
protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.Release();
}
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalPosition(inverse3.WorkspaceCenterLocalPosition + new Vector3(positionX, positionY, positionZ));
}
}
请确保已禁用ForceControl脚本以及所有其他控制该设备的脚本。
与前面的示例类似:
- 请使用
positionX, Y, and Z为了调整该 位置 在“播放”模式下,使用滑块。所选海滩
Range(-0.1, 0.1)大致相当于可达到的最大位置。 - 该方法
Awake恢复该组件 Inverse3. - 该方法
OnEnable记录回调函数OnDeviceStateChanged在调用该方法后,由触觉更新引发,在单独的执行线程中Awake并且每当脚本被激活时。 - 该方法
OnDisable当脚本被禁用或应用程序停止运行时,取消注册回调函数并重置力值。
不过,两者之间还是存在一些差异:
- 回调函数
OnDeviceStateChanged, 在每个触觉帧中, 获取“检查器”窗口的位置向量,并将其添加到WorkspaceCenterLocalPosition, 并使用该方法将其发送至Inverse3CursorSetLocalPosition.
进入播放模式前,请将光标保持在靠近中心的位置。 设备应切换至位置控制状态(由蓝色指示灯显示)。 随后,您可以通过滑块调整输出位置,从而探索设备的工作空间。
在调整位置时,Inverse3 将开始移动。请确保工作区域畅通无阻且没有贵重物品,并始终握住滑块。 如需了解更多信息,请参阅《安全使用指南》一文。
