Inverse Unity Package 시작하기
이 가이드는 기본 설정을 안내하고, 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를 통해 제공됩니다. 패키지를 통합하려면 다음 단계를 따르십시오:
-
Edit > Project Settings > Package Manager 메뉴를 엽니다. 새 Scoped Registry를 추가하고 다음 값을 설정합니다:
- 이름:
Haply Robotics - URL:
https://unitypackages.haply.co - 범위(Scope(s)):
co.haply

- 이름:
-
Window > Package Manager 메뉴에서 add + 버튼을 클릭하고 Add package by name을 선택합니다.
co.haply.inverse를 입력하고 Add를 클릭합니다.
설치가 완료되면 패키지 관리자에 Inverse 패키지가 표시됩니다.
햅틱 리그 설정
햅틱 리그를 생성하려면 GameObject > Haply Inverse > Haptic Rig (one hand) 메뉴로 이동합니다. 이 작업은 Inverse3 컨트롤러 및 VerseGrip 구성요소를 포함하는 완전한 환경을 만듭니다.
씬에는 이제 다음 항목이 포함됩니다:
- Haptic Device Mapper: Haply Inverse Service 기준으로 장치 할당을 관리합니다.
- Haptic Origin: 씬 안에서 햅틱 설정의 크기와 위치를 조정합니다.
- Haptic Controller: Inverse3 및 VerseGrip 장치 데이터를 기반으로 커서의 힘 또는 위치를 관리합니다.
- Cursor: 씬 표현을 위한 Inverse3 Cursor 및 VerseGrip Cursor 컴포넌트를 포함합니다.

패키지 구성요소에 대한 자세한 내용은 Global Architecture 문서 페이지를 참고하십시오.
Play Mode에서는 구체(sphere)가 Inverse3 커서 및 VerseGrip 방향과 동기화되어 이동하고 회전합니다.


힘 제어 모드
ForceControl.cs C# 스크립트를 생성하고 이를 Haptic Origin 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에 이르는 높은 주파수로 호출됩니다. 이 콜백 내의 모든 코드가 고도로 최적화되어 있는지 확인하는 것이 매우 중요합니다.
사용법
Play Mode에 들어가기 전에 커서를 잡고 있는지 확인하십시오. 장치는 녹색 표시등과 함께 Force Control 상태로 전환되어야 합니다. 그런 다음 슬라이더를 사용하여 힘 출력을 조정하면서 장치 작업 공간을 탐색할 수 있습니다.
힘을 조정하면 Inverse3 이동이 발생합니다. 작업 공간이 비어 있는지 확인하고 항상 커서를 잡고 있으십시오. 안전 지침은 안전 사용 문서를 참고하십시오.

위치 제어 모드
마찬가지로 장치의 위치를 제어하는 PositionControl.cs C# 스크립트를 생성하고, 이를 Haptic Origin 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 장치가 움직입니다. 작업 공간에 귀중품이 없는지 확인하고, 항상 커서를 잡고 있으십시오. 자세한 내용은 안전 사용 문서를 참조하십시오.
