跳到主要内容
本页面由机器自动翻译,可能包含错误。 查看英文原文

Unity Physics Glove 指南

使用 bHaptics Physics Glove SDK,您可以通过指尖和手腕的振动,为 TactGlove 用户带来身临其境的 VR 体验。


这是用来做什么的

为了让虚拟手能够与虚拟环境发生物理碰撞并与虚拟物体交互,可以为虚拟手应用物理

为手应用物理时,通常会使用主从(master-slave)结构。要实现这一点,您可以使用 HPTK、Ultraleap Physics Hand、Auto Hand 等插件。您也可以自行实现。

bHaptics Physics Glove SDK 可以使用主从物理为虚拟手应用触觉。它向触觉手套提供适当的振动,使用户感觉自己仿佛真的拿起了一个虚拟物体。

备注

如果只是单纯地让 TactGlove 振动,则无需使用 Physics Glove SDK。只要您已完成之前的 Unity 指南,仍然可以使用 TactGlove。

本文档中的说明提供的功能可帮助您在虚拟手执行物理动作时应用更好的触觉。

前提条件

规格

开始之前

备注

我们假设您已经按照 Unity 指南 设置好了 Unity 项目。

请确保您的 Unity 项目已满足以下要求。

  • 使用 API Key 和 App ID 将触觉应用连接到您的项目
  • 场景中存在 "[bhaptics]" 预制体。

添加预制体

  1. 在 Project Window 中,进入 "Assets" → "Bhaptics" → "SDK2" → "Prefabs"。
  2. 将 "[bHapticsGlove]" 预制体添加到您的场景中。
  3. 在 hierarchy 中,选择您添加的 "[bHapticsGlove]",您将在 inspector 中看到 Bhaptics Physics Glove 组件。 Untitled
  4. 选择 "Create New GloveHapticSettings" 按钮。然后会出现手套触觉设置。 Untitled

这些默认设置的值在典型环境中会理想地工作。不过,为了获得良好的手感,您可能需要根据项目环境调整参数值。

有关参数的更详细说明,可以在参考中的 BhapticsPhysicsGloveSettings 页面中找到。

为 Physics Hand 应用 bHaptics

根据您的手部物理实现方式,注册事件的方式可能会有所不同。

但是,共同的原则是当指尖检测到碰撞时,指尖的马达会提供适量的触觉

找到一个位于指尖、带有 Collider(或 Rigidbody)的 GameObject,然后附加一个实现以下内容的组件。当 Collision 事件被调用并执行下面的函数时,手套将提供触觉。

有关 Unity 中 Collision 事件的更多信息,请参阅 Unity 手册

根据您使用的插件,可能会有在发生碰撞事件时调用的事件。同样,您可以通过调用应用触觉的函数来实现这一点。请参考以下内容。

备注

手套具有以下马达映射。 马达索引

SendEnterHaptic

此代码是我们假设将在 OnCollisionEnter 中使用而创建的函数。

private int fingerIndex;
private bool isLeft;

private void OnCollisionEnter(Collision collision)
{
// We typically use collision.relativeVelocity, but depending on how your hand physics are designed, you can use other overload functions.
BhapticsPhysicsGlove.Instance.SendEnterHaptic(isLeft ? PositionType.GloveL : PositionType.GloveR, fingerIndex, collision.relativeVelocity);
}

SendStayHaptic

此代码是我们假设将在 OnCollisionStay 中使用而创建的函数。

private int fingerIndex;
private bool isLeft;

private void OnCollisionStay(Collision collision)
{
BhapticsPhysicsGlove.Instance.SendStayHaptic(isLeft ? PositionType.GloveL : PositionType.GloveR, fingerIndex, slaveTransform, masterTransform);
}

SendExitHaptic

此代码是我们假设将在 OnCollisionExit 中使用而创建的函数。

private int fingerIndex;
private bool isLeft;

private void OnCollisionExit(Collision collision)
{
BhapticsPhysicsGlove.Instance.SendExitHaptic(isLeft ? PositionType.GloveL : PositionType.GloveR, fingerIndex);
}

注册这三个事件并进行测试。当指尖发生接触时,事件将触发。

有关这些触觉函数的更多信息,请参阅 BhapticsPhysicsGlove 类参考