본문으로 건너뛰기

Unity Physics Glove 가이드

bHaptics Physics Glove SDK를 사용하면 손끝과 손목의 진동을 통해 TactGlove 사용자에게 몰입감 있는 VR 경험을 제공할 수 있습니다.


무엇을 위한 것인가요

가상의 손이 가상 환경과 물리적으로 충돌하고 가상 오브젝트와 상호작용할 수 있도록 가상의 손에 물리를 적용할 수 있습니다.

손에 물리를 적용할 때는 일반적으로 마스터-슬레이브 구조가 사용됩니다. 이를 구현하기 위해 HPTK, Ultraleap Physics Hand, Auto Hand 같은 플러그인을 사용할 수 있습니다. 직접 구현할 수도 있습니다.

bHaptics Physics Glove SDK는 마스터-슬레이브 물리를 사용하는 가상의 손에 햅틱을 적용할 수 있습니다. 햅틱 글러브에 적절한 진동을 제공하여 사용자가 실제로 가상 오브젝트를 집는 듯한 느낌을 받게 합니다.

노트

TactGlove를 단순히 진동시키기만 한다면 Physics Glove SDK를 사용할 필요가 없습니다. 이전 Unity 가이드까지 진행했다면 TactGlove를 그대로 사용할 수 있습니다.

이 문서의 안내는 가상의 손이 물리적 동작을 수행할 때 더 나은 햅틱을 적용하는 데 도움이 되는 기능을 제공합니다.

사전 준비

사양

  • Unity: 2019.4.0+
  • 마스터-슬레이브 구조로 물리가 구현된 손
  • bHaptics Plugin: 2.3.0+
    • 기본 bHaptics SDKbHaptics Physics Glove SDK가 이미 포함되어 있습니다.

시작하기 전에

노트

Unity 가이드를 따라 Unity 프로젝트 설정을 완료했다고 가정합니다.

Unity 프로젝트에서 다음 요구 사항이 충족되었는지 확인하세요.

  • API 키와 앱 ID를 사용하여 햅틱 애플리케이션이 프로젝트에 연동되어 있습니다.
  • 씬에 "[bhaptics]" 프리팹이 존재합니다.

프리팹 추가하기

  1. Project Window에서 "Assets" → "Bhaptics" → "SDK2" → "Prefabs"로 이동합니다.
  2. "[bHapticsGlove]" 프리팹을 씬에 추가합니다.
  3. 하이어라키에서 추가한 "[bHapticsGlove]"를 선택하면 인스펙터에서 Bhaptics Physics Glove 컴포넌트를 확인할 수 있습니다. Untitled
  4. "Create New GloveHapticSettings" 버튼을 선택합니다. 그러면 글러브 햅틱 설정이 나타납니다. Untitled

기본값으로 설정된 이 값들은 일반적인 환경에서 이상적으로 작동합니다. 다만 좋은 느낌을 위해 프로젝트 환경에 따라 파라미터 값을 조정해야 할 수도 있습니다.

파라미터에 대한 자세한 설명은 Reference의 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 클래스 레퍼런스를 참고하세요.