Inverse Unity 套件入门
本指南将引导您完成基本设置,并提供一个简单示例,演示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 - 范围(Scope(s)):
co.haply

- 姓名:
-
窗口 > 软件包管理器 在菜单中 加上 点击按钮,然后 按名称添加软件包选择。
co.haply.inverse输入,然后 添加点击。
安装完成后,Inverse 软件包将显示在软件包管理器中。
触觉联赛设置
要创建触觉装置,请依次选择“GameObject” > “Haply Inverse” > “Haptic Rig (one hand)”菜单。 此操作将创建一个包含Inverse3 控制器和VerseGrip组件的完整环境。
该场景现在包含以下内容:
- 触觉设备映射器:Haply 根据反向服务管理设备分配。
- “触觉源”:在场景中调整触觉设置的大小和位置。
- 触觉控制器: Inverse3 基于VerseGrip设备的数据,控制光标的力量或位置。
- 光标:包含用于场景表现的Inverse3 光标和VerseGrip光标 组件。

有关软件包组件的详细信息,请参阅“全局架构”文档页面。
在“播放模式”下,球体(sphere)会 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 设备会移动。请确保工作区域内没有贵重物品,并始终握住光标。 详情请参阅安全使用说明书。
