본문으로 바로 가기

Inverse Unity 패키지 시작하기

이 가이드에서는 기본 설정을 안내하고, ‘ Haply Inverse Unity Package’의 기본적인 사용법을 보여주는 간단한 예제를 제공합니다. 여기에는 패키지 설치, 햅틱 리그 설정, 힘 제어 및 위치 제어를 위한 간단한 스크립트 작성이 포함됩니다.

자세한 내용과 고급 기법은 튜토리얼을참고하십시오.

버전 지원​

  • Unity 2021.3.x LTS: 지원
  • Unity 2022.1.x LTS: 지원
  • Unity 6000.x LTS: 지원
  • Haply Inverse SDK: 3.1.0 이상

사전 요구 사항​

  • Haply Inverse SDK 3.1.0 이상 버전을 설치하십시오.
  • Haply Inverse Service의 정상 작동 여부를 확인해 주십시오.
  • 씬을 실행하기 전에 Inverse3 및 VerseGrip 장치가 연결되어 있고 보정되었는지 확인하십시오.
참고

이 패키지는 Inverse3 에 대한 지원을 강화하기 위해 지속적으로 개발되고 있습니다. 지원, 피드백 또는 요청 사항이 있으시면 ‘문의하기’를이용해 주십시오.

설치​

Inverse Unity 패키지는Unity의 Scoped Registry를통해 제공됩니다. 패키지를 통합하려면 다음 단계를 따르십시오:

  1. ‘편집 > 프로젝트 설정 > 패키지 관리자 ’ 메뉴를 엽니다. 새로운 Scoped Registry를 추가하고 다음 값을 설정합니다:

    • 이름: Haply Robotics
    • URL: https://unitypackages.haply.co
    • 범위(Scope(s)): co.haply

    Scoped Registry 구성

  2. 창 > 패키지 관리자 메뉴에서 추가 + 버튼을 클릭하고 이름으로 패키지 추가을 선택합니다. co.haply.inverse를 입력하고 추가를 클릭합니다.

    UPM UI 빠르게 추가하기

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

햅틱 리그 설정​

햅틱 리그를 생성하려면 GameObject > Haply Inverse > Haptic Rig (one hand) 메뉴로 이동합니다. 이 작업은 Inverse3 컨트롤러와 VerseGrip 구성 요소를 포함하는 완전한 환경을 생성합니다.

이 장면에는 이제 다음 항목이 포함됩니다:

  • 햅틱 장치 매퍼: Haply 인버스 서비스를 기준으로 장치 할당을 관리합니다.
  • 햅틱 원점: 씬 내에서 햅틱 설정의 크기와 위치를 조정합니다.
  • 햅틱 컨트롤러: Inverse3VerseGrip 장치의 데이터를 기반으로 커서의 힘이나 위치를 제어합니다.
  • 커서: 씬 표현을 위한 ‘Inverse3 ’ 커서 및 ‘VerseGrip’ 커서 컴포넌트가 포함되어 있습니다.

햅틱 리그 (한 손)

패키지 구성 요소에 대한 자세한 내용은 ‘Global Architecture’ 문서 페이지를참조하십시오.

플레이 모드에서는 구체(sphere)가 Inverse3 커서 및 VerseGrip의 방향과 동기화되어 이동하고 회전합니다.

Inverse3 검사관

핸들 인스펙터

힘 제어 모드​

ForceControl.cs C# 스크립트를 생성하고 이를 햅틱 오리진 GameObject에 연결합니다. 이 스크립트를 사용하면 인스펙터의 슬라이더를 통해 Inverse3 장치에 힘을 가할 수 있습니다.

using Haply.Inverse;
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(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalForce(new Vector3(forceX, forceY, forceZ));
}
}

힘 제어

스크립트 설명​

  • forceX, Y, Z: 슬라이더로 조절할 수 있는 힘 벡터의 성분입니다. 힘이 CursorSetForce 메서드에 전달되기 전에 안전 한계 내에 머물도록 합니다. 또는 표준 Vector3 필드를 사용할 수도 있습니다.

  • Awake(): 현재 GameObject 또는 그 자식에서 Inverse3 컴포넌트를 가져옵니다.

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

  • OnDisable(): 스크립트가 비활성화되거나 애플리케이션이 중지될 때 콜백 등록을 해제하고 힘을 초기화합니다.

  • OnDeviceStateChanged: 인스펙터 창에서 force 벡터를 가져오세요 CursorSetForce 메서드를 사용하여 Inverse3에 전달합니다.

    중요: 이 콜백은 햅틱 스레드에 의해 1kHz에서 8kHz에 이르는 높은 주파수로 호출됩니다. 이 콜백 내의 모든 코드가 고도로 최적화되어 있는지 확인하는 것이 매우 중요합니다.

사용법​

플레이 모드로 들어가기 전에 커서를 잡고 있는지 확인하십시오. 장치는 녹색 표시등과 함께 ‘Force Control’ 상태로 전환되어야 합니다. 그런 다음 슬라이더를 사용하여 힘 출력을 조절하면서 장치의 작업 공간을 탐색할 수 있습니다.

경고

힘을 조절하면 Inverse3 이동이 발생합니다. 작업 공간이 비어 있는지 확인하고 항상 커서를 잡고 계십시오. 안전 지침은 안전 사용 설명서를참조하십시오.

커서 힘 설정

위치 제어 모드​

마찬가지로 장치의 위치를 제어하는 PositionControl.cs C# 스크립트를 생성하고, 이를 햅틱 오리진 GameObject에 연결합니다.

using Haply.Inverse;
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(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalPosition(inverse3.WorkspaceCenterLocalPosition + new Vector3(positionX, positionY, positionZ));
}
}

ForceControl 스크립트 또는 장치를 제어하는 다른 모든 스크립트가 비활성화되어 있는지 확인하십시오.

위치 제어

이전 예제와 마찬가지로:

  • positionX, Y, and Z를 활용하여 플레이 모드에서 슬라이더로 위치을 조정하십시오.

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

  • Awake 메서드는 Inverse3 컴포넌트를 가져옵니다.
  • OnEnable 메서드는 Awake 메서드 호출 후 및 스크립트가 활성화될 때마다, 별도의 스레드에서 햅틱 업데이트의 OnDeviceStateChanged 콜백을 등록합니다.
  • OnDisable 이 메서드는 스크립트가 비활성화되거나 애플리케이션이 중지되면 콜백 등록을 해제하고 초기화합니다.

하지만 다음과 같은 차이점이 있습니다:

  • OnDeviceStateChanged 콜백은 각 햅틱 프레임마다 인스펙터 창에서 위치 벡터를 가져와 WorkspaceCenterLocalPosition에 더한 다음, CursorSetLocalPosition 메서드를 사용하여 Inverse3 장치로 전송합니다.

플레이 모드로 들어가기 전에 커서를 중앙 부근에 유지하십시오. 장치가 위치 제어 상태(파란색 표시등으로 표시됨)로 전환되어야 합니다. 그런 다음 슬라이더를 사용하여 위치 출력을 조절함으로써 장치의 작업 공간을 탐색할 수 있습니다.

경고

위치를 조정하면 Inverse3 장치가 움직입니다. 작업 공간에 귀중품이 없는지 확인하고, 항상 커서를 잡고 계십시오. 자세한 내용은 안전 사용 설명서를참조하십시오.

커서 위치 설정