快速入门:逆统一软件包
本指南概述了基本设置,并提供了一个简单的示例来演示 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 获取。要集成该软件包,请
-
打开 "编辑">"项目设置">"软件包管理器"。添加一个新的作用域注册表:
- 名称:
Haply Robotics
- URL:
https://unitypackages.haply.co
- 范围
co.haply
- 名称:
-
访问 窗口 > 软件包管理器点击 加上 按钮,然后选择 按名称添加软件包. 进入
co.haply.inverse
并点击 添加.
安装成功后,软件包管理器将显示 Inverse 软件包。
设置触觉装置
要创建触觉装配,请导航至 "游戏对象"(GameObject)>"反向"(Haply Inverse)>"触觉装配(单手)"。 该操作将使用 Inverse3 控制器和 VerseGrip 组装一个完整的环境。
现在您的场景将包括
- 触觉设备映射器:通过Haply 反向服务管理设备分配。
- 触觉原点:在场景中缩放和定位触觉装置。
- 触觉控制器:根据Inverse3和VerseGrip设备数据管理光标力或位置。
- 光标包含用于场景表示的Inverse3Cursor和VerseGrip Cursor组件。
有关软件包组件的更多详情,请参阅全局架构文档页面。
在 "播放模式 "下,球体将与反向 3光标和VerseGrip方向同步移动和旋转。
力控制模式
创建一个 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 将移动。确保工作区没有任何贵重物品,并始终按住光标。 有关其他详细信息,请参阅安全使用文章。