본문으로 이동

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를 통해 이용할 수 있습니다. 패키지를 통합하려면:

  1. ‘편집’ > ‘프로젝트 설정’ > ‘패키지 관리자’를 엽니다. 다음 내용을 사용하여 새로운 범위 지정 레지스트리를 추가합니다:

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

    구분 기호가 포함된 레코드

  2. 다음으로 이동하세요 창 > 패키지 관리자, 버튼을 클릭하세요 추가 +, 그런 다음 다음을 선택하세요 이름으로 패키지 추가. 입력하세요 co.haply.inverse 그리고 다음을 클릭하세요 추가.

    UPM 인터페이스에서 빠르게 추가하기

설치가 성공적으로 완료되면 패키지 관리자가 Inverse 패키지를 표시합니다.

햅틱 리그 설치​

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

이제 귀하의 장면에는 다음이 포함됩니다:

  • 햅틱 장치 매퍼: Haply 의 Inverse Service를 통해 장치 할당을 관리합니다.
  • Haptic Origin: 햅틱 구성을 장면 내에서 크기를 조정하고 위치를 지정합니다.
  • 햅틱 컨트롤러: 주변기기 데이터에 기반하여 커서의 힘이나 위치를 제어합니다 Inverse3 및 VerseGrip의 데이터를 기반으로 커서의 힘이나 위치를 제어합니다.
  • 커서: 씬에 표시하기 위한 Inverse3 Cursor 및 VerseGrip Cursor 구성 요소를 포함합니다.

햅틱 장비

패키지의 구성 요소에 대한 자세한 내용은 전체 아키텍처에 대한 문서 페이지를 참조하십시오.

재생 모드에서는 구체가 커서와 동기화되어 이동하고 회전하며 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() : 컴포넌트 불러오기 Inverse3 현재 GameObject 또는 그 자식 객체 중 하나를 기준으로 합니다.

  • OnEnable() : 콜백 함수 등록 OnDeviceStateChanged 메서드 호출 후, 별도의 실행 스레드에서 햅틱 업데이트로 인해 발생하는 문제 Awake 그리고 스크립트가 실행될 때마다.

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

  • OnDeviceStateChanged : 벡터를 가져옵니다 force ‘검사기’ 창에서 해당 정보를 가져와 다음으로 전달합니다. Inverse3 ~ 방법을 통해 CursorSetForce.

    중요: 콜백 함수는 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 콜백 함수 등록 OnDeviceStateChanged 메서드 호출 후, 별도의 실행 스레드에서 햅틱 업데이트로 인해 발생하는 문제 Awake 그리고 스크립트가 실행될 때마다.
  • 이 방법 OnDisable 스크립트가 비활성화되거나 애플리케이션이 종료되면 콜백 기능을 해제하고 힘을 초기화합니다.

그러나 몇 가지 차이점이 있습니다:

  • 리콜 기능 OnDeviceStateChanged, 각 햅틱 프레임마다, 인스펙터 창의 위치 벡터를 가져와, 이를 WorkspaceCenterLocalPosition, 그리고 다음 메서드를 사용하여 Inverse3 으로 전송합니다. CursorSetLocalPosition.

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

주의

위치를 조정할 때, ‘ Inverse3 ’가 움직이기 시작합니다. 작업 공간에 장애물이 없거나 귀중품이 놓여 있지 않은지 확인하고, 항상 커서를 잡고 계십시오. 자세한 내용은 ‘안전한 사용 방법’ 문서를 참조하십시오.

커서 위치 설정