跳至主要内容
版本: 2.2.0

快速入门:逆统一软件包

本指南概述了基本设置,并提供了一个简单的示例来演示 Haply Inverse Unity 软件包的基本用法,包括安装软件包、设置触觉装配以及创建用于力和位置控制的简单脚本。

要了解全面的详细信息和高级技术,请浏览教程

版本支持

  • Unity 2021.3.x LTS:支持
  • Unity 2022.3.x LTS:支持
  • Unity 2023.x.x(技术流):实验性
  • Haply Inverse SDK:2.0.0 或更高版本

先决条件

  • 安装Haply Inverse SDK2.0.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)>"触觉装配(单手)"。 该操作将使用 Inverse3 控制器和 VerseGrip 组装一个完整的环境。

现在您的场景将包括

  • 触觉设备映射器:通过Haply 反向服务管理设备分配。
  • 触觉原点:在场景中缩放和定位触觉装置。
  • 触觉控制器:根据Inverse3VerseGrip设备数据管理光标力或位置。
  • 光标包含用于场景表示的Inverse3CursorVerseGrip Cursor组件。

触觉装置

有关软件包组件的更多详情,请参阅全局架构文档页面

在 "播放模式 "下,球体将与反向 3光标和VerseGrip方向同步移动和旋转。

逆3-检查器

处理督察

力控制模式

创建一个 ForceControl.cs C# 脚本,并将其附加到 触觉起源 游戏对象。 该脚本允许您对 逆 3 使用检查器滑块检查设备。

using Haply.Inverse.Unity;
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(Inverse3 inverse3)
{
inverse3.CursorSetForce(forceX, forceY, forceZ);
}
}

力控

脚本说明

  • forceX, Y, Z:使用滑块可调节力矢量分量,确保力在传递至系统前保持在安全范围内。 CursorSetForce 方法。 或者,采用标准 Vector3 字段。

  • Awake():检索 逆 3 组件。

  • OnEnable():注册 OnDeviceStateChanged 后,在一个单独的线程中从触觉更新回调 Awake 方法调用,以及每次启用脚本时。

  • OnDisable():取消注册回调,并在脚本禁用或应用程序停止时重置强制。

  • OnDeviceStateChanged:获取 force 检查器窗口中的矢量,并将其转发给 逆 3 使用 CursorSetForce 方法。

    重要:回调由触觉线程以 4kHz 至 8kHz 的高频率触发。 确保该回调中的所有代码都经过高度优化至关重要。

使用方法

进入 "播放 "模式前,请确保您已按住光标。设备应过渡到 "力控制 "状态,此时绿灯亮起。 然后,您就可以通过使用滑块调整力输出来浏览设备工作区。

警告

调整力将导致反向 3 移动。请确保您的工作空间畅通无阻,并始终按住光标。 有关安全指南,请参阅安全使用文章

光标设置力

位置控制模式

同样,创建一个 PositionControl.cs 控制设备位置的 C# 脚本,并将其附加到 触觉起源 游戏对象

using Haply.Inverse.Unity;
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(Inverse3 inverse3)
{
var position = inverse3.WorkspaceCenterLocalPosition + new Vector3(positionX, positionY, positionZ);
inverse3.CursorSetLocalPosition(position);
}
}

确保已禁用ForceControl脚本或任何其他控制设备的脚本。

位置控制

与前面的例子类似:

  • 利用 positionX, Y, and Z 以调整 位置 在播放模式下使用滑块。

    选定的 Range(-0.1, 0.1) 大致相当于可达到的最大位置。

  • "(《世界人权宣言》) Awake 方法检索 逆 3 组件。
  • "(《世界人权宣言》) OnEnable 方法注册 OnDeviceStateChanged 后,在一个单独的线程中从触觉更新回调 Awake 方法调用,以及每次启用脚本时。
  • "(《世界人权宣言》) OnDisable 方法取消注册回调,并在脚本禁用或应用程序停止时重置强制。

不过,两者之间还是有区别的:

  • "(《世界人权宣言》) OnDeviceStateChanged 回调,在每一帧触觉帧期间、 从检测器窗口获取位置矢量,并将其添加到 WorkspaceCenterLocalPosition, 并使用 CursorSetLocalPosition 方法。

在进入播放模式之前,请将光标保持在靠近中心位置的位置。 设备应过渡到位置控制状态(蓝灯指示)。 然后,您可以使用滑块调整位置输出,探索设备工作区。

警告

调整位置时,Inverse3 将移动。确保工作区没有任何贵重物品,并始终按住光标。 有关其他详细信息,请参阅安全使用文章

光标设置位置