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 이상
필수 조건
- 버전 3.1.0 이상에서 Haply Inverse SDK 버전 3.1.0 이상으로 설치하십시오.
- Haply 의 Inverse Service가 정상적으로 작동하는지 확인하십시오.
- 장면을 시작하기 전에 Inverse3 및 VerseGrip 장치가 연결되어 있고 보정되었는지 확인하십시오.
이 패키지는 Inverse3 에 대한 지원을 개선하기 위해 지속적으로 개발되고 있습니다. 지원, 피드백 또는 문의 사항이 있으시면 저희에게 연락해 주십시오.
설치
Inverse Unity 패키지는 Unity의 Scoped Registry를 통해 이용할 수 있습니다. 이 패키지를 통합하려면 다음 절차를 따르십시오:
-
‘편집’ > ‘프로젝트 설정’ > ‘패키지 관리자’를 엽니다. 다음 정보를 입력하여 새로운 범위 지정 레지스트리를 추가합니다:
- 이름:
Haply Robotics - URL:
https://unitypackages.haply.co - 범위:
co.haply

- 이름:
-
전화해 주세요 창 > 패키지 관리자 이제 버튼을 클릭하세요 추가 + 그리고 다음을 선택하세요 이름으로 패키지 추가. 입력하세요
co.haply.inverse‘ein’을 클릭하고 추가.
설치가 성공적으로 완료되면 패키지 관리자에 Inverse 패키지가 표시됩니다.
햅틱 리그 설정
햅틱 리그를 생성하려면 GameObject > Haply Inverse > Haptic Rig (one hand)로 이동하세요. 이렇게 하면 Inverse3 컨트롤러와 VerseGrip이 포함된 완전한 환경이 구성됩니다.
해당 장면에는 그 후 다음과 같은 내용이 포함됩니다:
- 햅틱 장치 매퍼: Haply 역방향 서비스를 통해 장치 매핑을 관리합니다.
- 햅틱 원점: 씬 내에서 햅틱 설정을 확대/축소하고 위치를 조정합니다.
- 햅틱 컨트롤러: Inverse3 및 VerseGrip의 기기 데이터를 기반으로 커서 강도 및 커서 위치를 관리합니다.
- 커서: 씬에 표시하기 위한 ‘Inverse3 ’ 커서와 ‘VerseGrip’ 커서 구성 요소를 포함합니다.

패키지의 구성 요소에 대한 자세한 내용은 ‘전반적인 아키텍처’ 페이지에서 확인하실 수 있습니다.
플레이 모드에서는 공이 VerseGrip의 커서와 동기화되어 움직이고 회전하며 Inverse3VerseGrip의 방향에 맞춰 움직이고 회전합니다.


힘 제어 모드
C# 스크립트 만들기 ForceControl.cs 그리고 이를 GameObject에 연결하세요 햅틱 오리진 an.
이 스크립트를 사용하면 인스펙터의 슬라이더를 통해 장치에 힘을 가할 수 있습니다. 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(): 해당 컴포넌트를 호출합니다 Inverse3 현재 GameObject 또는 그 하위 객체 중 하나에 따라 달라집니다. -
OnEnable(): 콜백 등록OnDeviceStateChanged해당 방법이 적용된 후, 별도의 스레드에서 햅틱 업데이트에 대해Awake호출되었을 때, 그리고 스크립트가 활성화될 때마다. -
OnDisable(): 스크립트가 비활성화되거나 애플리케이션이 종료되면 콜백 등록을 해제하고 권한을 초기화합니다. -
OnDeviceStateChanged: 벡터를 호출합니다forceInspector 창에서 해당 객체를 분리하고 메서드를 사용하여CursorSetForcean das Inverse3 계속.중요: 콜백은 1kHz에서 8kHz 범위의 높은 주파수로 햅틱 스레드에 의해 트리거됩니다. 이 콜백 내의 전체 코드가 철저히 최적화되어 있어야 합니다.
사용법
플레이 모드로 전환하기 전에 커서를 고정해 두십시오. 기기가 ‘Force Control’ 상태로 전환되면 녹색 표시등이 켜집니다. 그런 다음 슬라이더를 통해 출력력을 조절하여 기기의 작동 영역을 이동할 수 있습니다.
힘을 조절하면 Inverse3 이 움직입니다. 작업 공간에 장애물이 없는지 확인하고, 커서를 항상 단단히 잡고 계십시오. 안전 수칙은 ‘안전한 사용법’ 관련 문서에서 확인하실 수 있습니다.

위치 제어 모드
C# 스크립트도 마찬가지로 작성하십시오. PositionControl.cs 기기의 위치를 제어하고 GameObject에 연결하세요 햅틱 오리진 an.
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, um die 위치 플레이 모드에서 슬라이더를 통해 조정할 수 있습니다.선택된 영역
Range(-0.1, 0.1)대략 달성 가능한 최고 순위에 해당합니다. - 이 방법
Awake해당 컴포넌트를 호출합니다 Inverse3 ab. - 이 방법
OnEnable콜백을 등록합니다OnDeviceStateChanged메서드 호출 후 별도의 스레드에서 진행되는 햅틱 업데이트에서Awake그리고 스크립트가 실행될 때마다. - 이 방법
OnDisable스크립트가 비활성화되거나 애플리케이션이 종료되면 콜백 등록을 해제하고 힘을 초기화합니다.
그러나 차이점이 있습니다:
- 콜백
OnDeviceStateChanged각 햅틱 프레임 동안 인스펙터 창에서 위치 벡터를 가져와, 이를WorkspaceCenterLocalPosition그리고 다음 메서드를 사용하여 이를 전송합니다.CursorSetLocalPositionInverse3.
재생 모드로 전환하기 전에 커서를 중앙 위치 근처에 두십시오. 장치가 위치 제어 모드로 전환되어야 합니다(파란색 표시등으로 표시됨). 그런 다음 슬라이더를 사용하여 위치 출력을 조정함으로써 장치의 작동 범위를 탐색할 수 있습니다.
위치를 조정할 때 Inverse3 이 움직입니다. 작업 공간에 귀중품이 없는지 확인하고, 커서를 항상 단단히 잡고 계십시오. 자세한 내용은 ‘안전한 사용법’ 관련 기사에서 확인하실 수 있습니다.
