跳转至主要内容

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获取。要集成该插件:

  1. 打开“编辑”>“项目设置”>“包管理器”。添加一个新的“范围注册表”,内容如下:

    • 姓名: Haply Robotics
    • 网址: https://unitypackages.haply.co
    • 范围: co.haply

    分隔符分隔的记录

  2. 访问 窗口 > 软件包管理器, 请点击按钮 加上,然后选择 按名称添加软件包. 请输入 co.haply.inverse 然后点击 添加.

    在UPM界面中快速添加

安装成功后,包管理器将显示 Inverse 包。

触觉测试台的搭建​

要创建一个触觉装置,请依次选择“GameObject” > “Haply Inverse” > “Haptic Rig(单手)”。 此操作将组装一个包含Inverse3 控制器和VerseGrip的完整环境。

您的场景现在将包含:

  • 触觉设备映射器:通过Haply 逆向服务管理外设的分配。
  • “触觉原点”:对触觉配置进行缩放并将其定位在场景中。
  • 触觉控制器:根据外设数据控制光标的力量或位置 Inverse3 以及VerseGrip。
  • 光标:包含用于在场景中显示的Inverse3 光标和VerseGrip光标组件。

触觉装置

有关该软件包中各组件的更多详细信息,请参阅整体架构的文档页面。

在“播放”模式下,球体将与光标同步移动和旋转 Inverse3 以及VerseGrip的朝向。

督察Inverse3

把手检查员

力控制模式​

创建脚本 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, 并使用该方法将其发送至Inverse3 CursorSetLocalPosition.

进入播放模式前,请将光标保持在靠近中心的位置。 设备应切换至位置控制状态(由蓝色指示灯显示)。 随后,您可以通过滑块调整输出位置,从而探索设备的工作空间。

注意

在调整位置时,Inverse3 将开始移动。请确保工作区域畅通无阻且没有贵重物品,并始终握住滑块。 如需了解更多信息,请参阅《安全使用指南》一文。

设置光标位置