跳转至主要内容

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获取。要集成该插件,请按照以下步骤操作:

  1. 打开“编辑”>“项目设置”>“包管理器”。添加一个新的“范围注册表”,并填写以下信息:

    • 名称: Haply Robotics
    • URL: https://unitypackages.haply.co
    • 范围 co.haply

    范围-注册表

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

    upm-ui-quick-add

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

设置触觉测试台​

要创建一个触觉装置,请依次选择“GameObject” > “Haply Inverse” > “Haptic Rig (one hand)”。 系统将自动生成一个完整的环境,其中包含Inverse3 控制器和VerseGrip。

该场景随后包含:

  • 触觉设备映射器:通过Haply 逆向服务管理设备映射。
  • 触觉原点:在场景中调整触觉设置的缩放比例和位置。
  • 触觉控制器:根据 Inverse3和VerseGrip的设备数据来管理光标力度或光标位置。
  • 光标:包含用于在场景中显示的Inverse3 光标和VerseGrip光标组件。

触觉装置

有关该套件各组件的更多详细信息,请参阅“全局架构”页面。

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

inverse3-检查员

处理督察

力控制模式​

编写一个 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”窗口中移出,并借助该方法 CursorSetForce an 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 并借助该方法将其发送 CursorSetLocalPosition Inverse3 。

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

警告

调整位置时,Inverse3 会移动。请确保工作区域内没有贵重物品,并始终牢牢握住光标。 更多详细信息,请参阅安全使用指南。

设置光标位置