주요 콘텐츠로 건너뛰기
버전: 2.0.0

빠른 시작: 인버스 유니티 패키지

이 가이드에서는 패키지 설치, 햅틱 릭 설정, 힘 및 위치 제어를 위한 간단한 스크립트 생성 등 Haply 인버스 유니티 패키지의 기본 사용법을 설명하며 간단한 예제를 제공합니다.

자세한 내용과 고급 기술을 알아보려면 튜토리얼을 살펴보세요.

버전 지원

  • Unity 2021.3.x LTS: 지원됨
  • Unity 2022.3.x LTS: 지원됨
  • Unity 2023.x.x(테크 스트림): 실험 단계
  • 하플리 인버스 SDK: 2.0.0 이상

전제 조건

  • 하플리 인버스 SDK 버전 2.0.0 이상을 설치합니다.
  • Haply 인버스 서비스가 작동하는지 확인합니다.
  • 씬을 시작하기 전에 Inverse3 및 VerseGrip 장치가 연결되고 보정되었는지 확인합니다.
참고

이 패키지는 Inverse3에 대한 지원을 강화하기 위해 지속적으로 개발 중입니다. 지원, 피드백 또는 요청 사항이 있으면 문의해 주세요.

설치

인버스 유니티 패키지는 유니티의 범위 지정 레지스트리를 통해 사용할 수 있습니다. 패키지를 통합하려면

  1. 편집 > 프로젝트 설정 > 패키지 관리자를 엽니다. 새 범위 지정 레지스트리를 추가합니다:

    • 이름: Haply Robotics
    • URL: https://unitypackages.haply.co
    • 범위: co.haply

    범위 지정 레지스트리

  2. 액세스 창 > 패키지 관리자을 클릭하고 추가 + 버튼을 클릭하고 이름으로 패키지 추가. 입력 co.haply.inverse 을 클릭하고 추가.

    UPM-UI-QUICK-ADD

설치가 완료되면 패키지 관리자에 Inverse 패키지가 표시됩니다.

햅틱 릭 설정

햅틱 릭을 생성하려면 게임 오브젝트 > 햅리 인버스 > 햅틱 릭(한 손)으로 이동합니다. 이 작업은 Inverse3 컨트롤러와 VerseGrip으로 완전한 환경을 조립합니다.

이제 씬에 다음이 포함됩니다:

  • 햅틱 디바이스 매퍼: 햅리 인버스 서비스로 디바이스 할당을 관리합니다.
  • 햅틱 원점: 씬 내에서 햅틱 설정의 스케일과 위치를 조정합니다.
  • 햅틱 컨트롤러: Inverse3VerseGrip 디바이스 데이터를 기반으로 커서 힘 또는 위치를 관리합니다.
  • 커서: 커서: 장면 표현을 위한 Inverse3CursorVerseGrip 커서 컴포넌트를 포함합니다.

햅틱 리그

패키지 구성 요소에 대한 자세한 내용은 글로벌 아키텍처 문서 페이지를 참조하세요.

재생 모드에서 구는 Inverse3 커서 및 VerseGrip 방향과 동기화하여 이동하고 회전합니다.

인버스3-인스펙터

핸들 인스펙터

강제 제어 모드

만들기 ForceControl.cs C# 스크립트에 첨부하여 햅틱 오리진 게임 오브젝트. 이 스크립트를 사용하면 Inverse3 장치에서 인스펙터 슬라이더를 사용합니다.

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.TryResetForce();
}

private void OnDeviceStateChanged(Inverse3 inverse3)
{
inverse3.CursorSetLocalForce(forceX, forceY, forceZ);
}
}

힘 제어

스크립트 설명

  • forceX, Y, Z: 슬라이더를 사용하여 힘 벡터 구성 요소를 조정하여 힘이 안전 한도 내에서 유지되도록 보장합니다. CursorSetForce 메서드를 사용할 수 있습니다. 또는 표준 Vector3 필드를 사용할 수 있습니다.

  • Awake(): 검색 Inverse3 컴포넌트를 현재 게임 오브젝트 또는 그 자식에서 가져옵니다.

  • OnEnable(): 등록 OnDeviceStateChanged 콜백을 별도의 스레드에서 햅틱 업데이트의 Awake 메서드 호출과 스크립트가 활성화될 때마다 호출합니다.

  • OnDisable(): 스크립트가 비활성화되거나 애플리케이션이 중지되면 콜백 등록을 취소하고 강제 적용을 재설정합니다.

  • OnDeviceStateChanged: 를 가져옵니다. force 벡터를 인스펙터 창에서 가져와서 Inverse3 를 사용하여 CursorSetForce 메서드를 사용합니다.

    중요: 콜백은 햅틱 스레드에 의해 4kHz~8kHz 범위의 높은 주파수로 트리거됩니다. 이 콜백 내의 모든 코드가 고도로 최적화되어 있는지 확인하는 것이 중요합니다.

사용법

재생 모드로 들어가기 전에 커서를 길게 누르고 있는지 확인하세요. 장치가 녹색 표시등으로 표시되는 강제 제어 상태로 전환되어야 합니다. 그런 다음 슬라이더를 사용하여 힘 출력을 조정하여 디바이스 작업 공간을 탐색할 수 있습니다.

경고

힘을 조절하면 Inverse3가 움직입니다. 작업 공간이 비어 있는지 확인하고 항상 커서를 잡고 있어야 합니다. 안전 지침은 안전 사용 문서를 참조하세요.

커서 설정 힘

위치 제어 모드

마찬가지로 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 Vector3 _basePosition;

private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}

protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}

protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.TryResetForce();
}

private void OnDeviceStateChanged(Inverse3 inverse3)
{
if (_basePosition == Vector3.zero)
{
_basePosition = inverse3.LocalPosition;
}
inverse3.CursorSetLocalPosition(_basePosition + new Vector3(positionX, positionY, positionZ));
}
}

ForceControl 스크립트 또는 장치를 제어하는 다른 스크립트가 비활성화되어 있는지 확인합니다.

위치 제어

이전 예와 비슷합니다:

  • 활용 positionX, Y, and Z 를 조정하려면 위치 플레이 모드에서 슬라이더를 사용합니다.

    선택한 Range(-0.1, 0.1) 는 대략 달성 가능한 최대 위치에 해당합니다.

  • 그리고 Awake 메서드는 Inverse3 컴포넌트입니다.
  • 그리고 OnEnable 메서드를 등록하면 OnDeviceStateChanged 콜백을 별도의 스레드에서 햅틱 업데이트의 Awake 메서드 호출과 스크립트가 활성화될 때마다 호출합니다.
  • 그리고 OnDisable 메서드는 콜백 등록을 취소하고 스크립트가 비활성화되거나 애플리케이션이 중지되면 강제성을 재설정합니다.

그러나 차이점이 있습니다:

  • 그리고 OnDeviceStateChanged 콜백은 처음에 basePosition. 그런 다음 각 햅틱 프레임 동안 인스펙터 창에서 위치 벡터를 가져와서 basePosition를 사용하여 Inverse3로 전송합니다. CursorSetPosition 메서드를 사용합니다.

재생 모드로 들어가기 전에 커서를 길게 누릅니다. 장치가 위치 제어 상태로 전환됩니다(파란색 표시등으로 표시됨). 그런 다음 슬라이더로 위치 출력을 조정하여 디바이스 작업 공간을 탐색할 수 있습니다.

경고

위치를 조정할 때 Inverse3가 움직입니다. 작업 공간에 귀중품이 없는지 확인하고 항상 커서를 잡고 있어야 합니다. 자세한 내용은 안전한 사용 문서를 참조하세요.

커서 설정 위치