开始使用 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 请确认 Inverse Service是否正在运行。
- 在启动场景之前,请确保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 反向服务”来管理设备映射。
- Haptic Origin:在场景中对触觉设置进行缩放和定位。
- 触觉控制器: 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(): 从当前的 GameObject 或其子对象开始 Inverse3 获取组件。 -
OnEnable():Awake在调用该方法之后,以及每次脚本生效时,来自触觉更新的OnDeviceStateChanged在另一个线程中注册回调函数。 -
OnDisable(): 当脚本失效或应用程序停止运行时,将取消回调注册并重置状态。 -
OnDeviceStateChanged: 从检查器窗口中force获取向量,CursorSetForce使用该方法 Inverse3 将转发至。重要:该回调由触觉线程以 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该方法是,Awake在调用方法之后,以及每次脚本生效时,通过触觉更新进行OnDeviceStateChanged在另一个线程中注册回调函数。OnDisable当脚本失效或应用程序停止运行时,该方法会取消回调注册并重置状态。
不过,存在以下区别:
OnDeviceStateChanged回调函数会在每个触觉帧中, 从“检查器”窗口获取位置向量,并将该向量WorkspaceCenterLocalPosition此外,CursorSetLocalPosition使用该方法将其发送至Inverse3 。
进入再生模式之前,请将光标停留在中心位置附近。 设备应进入位置控制状态(由蓝色指示灯显示)。 随后,您可以通过滑块调整位置输出,以确认设备的工作空间。
调整位置后,Inverse3 会开始移动。请确认工作区中没有贵重物品,并务必握紧光标。 详情请参阅关于安全使用的文章。
