Inverse Unity 软件包入门指南
本指南介绍了基本设置,并通过一个简单示例演示了Haply 反向单位包的基本功能:包的安装、力反馈测试台的搭建,以及用于力与位置控制的简单脚本编写。
有关详细信息和高级技巧,请参阅教程。
版本支持
- 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 - URL:
https://unitypackages.haply.co - 范围
co.haply

- 名称:
-
请致电 窗口 > 软件包管理器 请点击该按钮 加上 然后选择 按名称添加软件包. 请输入
co.haply.inverse输入并点击 添加.
安装成功后,包管理器会显示 Inverse 包。
设置触觉测试台
要创建一个触觉装置,请依次选择“GameObject” > “Haply Inverse” > “Haptic Rig (one hand)”。 系统将自动生成一个完整的环境,其中包含Inverse3 控制器和VerseGrip。
该场景随后包含:
- 触觉设备映射器:通过Haply 逆向服务管理设备映射。
- 触觉原点:在场景中调整触觉设置的缩放比例和位置。
- 触觉控制器:根据 Inverse3和VerseGrip的设备数据来管理光标力度或光标位置。
- 光标:包含用于在场景中显示的Inverse3 光标和VerseGrip光标组件。

有关该套件各组件的更多详细信息,请参阅“全局架构”页面。
在“播放”模式下,小球会与 Inverse3 以及VerseGrip的朝向同步移动和旋转。


力控制模式
编写一个 C# 脚本 ForceControl.cs 并将其附加到该 GameObject 上 触觉起源 an.
此脚本允许您通过“检查器”中的滑块对设备施加力 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从“Inspector”窗口中移出,并借助该方法CursorSetForcean das Inverse3 继续。重要提示:该回调由触觉线程以高频触发,频率范围在1kHz至8kHz之间。 确保该回调中的全部代码经过深度优化至关重要。
用途
在切换至“播放”模式之前,请确保按住光标键。设备应切换至“力控”状态,此时指示灯会亮起绿色。 随后,您可以通过滑块调节输出力,从而在设备的工作范围内进行移动。
调整力道会导致“Inverse3 ”发生移动。请确保工作区域没有障碍物,并始终紧握光标。 安全注意事项请参阅《安全使用指南》一文。

位置控制模式
同样,请创建一个 C# 脚本 PositionControl.cs 用于控制设备的的位置,并将其附加到 GameObject 上 触觉起源 an.
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 ab. - 该方法
OnEnable注册回调函数OnDeviceStateChanged在调用该方法后,从另一个线程中的触觉更新中获取Awake并且每次脚本被激活时。 - 该方法
OnDisable当脚本被停用或应用程序退出时,将取消回调的注册并重置其状态。
不过,两者之间还是存在一些差异:
- 回调
OnDeviceStateChanged在每个触觉帧期间 从“检查器”窗口获取位置向量,并将它加到WorkspaceCenterLocalPosition并借助该方法将其发送CursorSetLocalPositionInverse3 。
在切换至播放模式之前,请将光标保持在接近中间位置处。 设备应切换至位置控制状态(由蓝色指示灯显示)。 随后,您可以通过滑块调整位置输出,从而探索设备的工作范围。
调整位置时,Inverse3 会移动。请确保工作区域内没有贵重物品,并始终牢牢握住光标。 更多详细信息,请参阅安全使用指南。
