Meta Haptic Studio에서 만든 Haptic 이용하기, Haptic SDK사용

Haptic SDK 설치

 

Oculus Developer Center | Downloads

 

developer.oculus.com

 

링크에 접속하셔서 SDK를 다운받아줍니다.

 


Haptic SDK 실행방법

폴더 위치 확인 & Test Script 작성

다운받은 폴더를 Assets폴더로 옮겨준 후 Single Haptic Test 스크립트를 하나 만들어줍니다.

public class SingleHapticTest : MonoBehaviour
{
     public HapticClip clip; 
     private HapticClipPlayer player;

     void Awake()
     {
         player = new HapticClipPlayer(clip);
     }

     public void PlayHapticClip1()
     {
       	 player.Play(HapticInstance.Hand.Left);
     }

 	  public void PlayHapticClip2()
      {
       	 // Setting a new clip will stop the current playback
       	 player.clip = clip2;

       	 // Let's start the player again with the new clip loaded
         player.Play(HapticInstance.Hand.Left);
      }

       public void AnotherGameEvent()
       {
           player.Stop();
       }

       void OnDestroy()
       {
           player.Release();
       }

       void OnApplicationQuit()
       {
           HapticInstance.Uninitialize();
       }
}

SingleHapticTest스크립트 내에 존재하는 PlayHapticClip 함수를 호출해주기만 하면 Haptic이 동작하는 것을 확인할 수 있습니다.

 

Stop() 함수를 호출하여 재생을 일찍 중지할 수 있습니다.

HapticClipPlayer에서 사용하는 클립을 교체하려면 재생하고 있는 HapticPlayer에 새 클립을 할당하면 됩니다. 클

립이 현재 재생 중인 경우 이 호출로 클립이 중지됩니다.

 

Haptic Clip의 경우 Haptic Studio에서 만들어와야합니다.

 

유니티 Meta Haptic Studio

Meta Haptic Studio이란? Meta에서 더 나은 햅틱 경험을 만들 수 있도록 도와주는 도구인 Meta Haptics Studio을 출시했습니다. Meta Haptics Studio을 통해 개발자는 고품질 햅틱을 더 쉽고 빠르게 설계 및 테스트

wlsdn629.tistory.com


Advanced Setting

Priority

주어진 순간에 각 컨트롤러에서 진동을 트리거할 수 있는 플레이어는 한 대의 Haptic Player뿐입니다.

 

동시에  Haptic Player에 Haptic Event를 재생하도록 설정한 경우 우선순위가 가장 높은  Haptic Player만 진동을 Trigger합니다.

 

플레이어의 우선순위가 같으면 마지막으로 시작한 플레이어만 진동을 트리거합니다. 


햅틱 Looping

isLooping 속성을 사용하여 클립 재생의 루프를 활성화하거나 비활성화합니다.

 

재생 전 또는 재생 중에 호출할 수 있습니다.

 

중지()를 호출하거나 다시 루프를 비활성화할 때까지 루프 재생이 무기한 계속됩니다.


햅틱 조절하기

 

amplitude 및 frequencyShift 속성을 설정하여 재생 중 진동의 강도 또는 주파수를 변경할 수 있습니다.

 

재생 전과 재생 중에 amplitude 및 frequencyShift  속성을 설정(변경)할 수 있습니다.


Haptic Clip Player에서 Priority, Looping, 진폭 및 주파수를 사용하는 간단한 예시입니다.

public class DriveCar : MonoBehaviour
{
    public HapticClip clip;	 
    private HapticClipPlayer player;

    void Awake()
    {
        player = new HapticClipPlayer(clip);
        // Optional: setting this clip to the highest priority.
        player.priority = 0;
        player.isLooping = true;
    }

    public void AcceleratorEngaged()
    {
       player.Play(HapticInstance.Hand.Left);
    }

    public void AcceleratorDisengaged()
    {
        player.Stop();
    }

    public void AcceleratorPositionChanged(
        float acceleratorPosition)
    {
        if (0.0f > acceleratorPosition || acceleratorPosition > 1.0f)
        {
            return;
        }

        player.amplitude = acceleratorPosition;
        player.frequencyShift = (acceleratorPosition * 2.0f) - 1.0f;
    }

    void OnDestroy()
    {
        player.Release();
    }
}

개발할 때 유용한 HapticClipPlayer properties

public void LogPlayerState()
{
     Debug.Log(player.clipDuration);
     
     Debug.Log(player.amplitude);
     
     Debug.Log(player.frequencyShift);
     
     Debug.Log(player.priority);
}

clipDuration

클립의 지속 시간(초)

 

amplitude 

진폭이 스케일링되는 양입니다. 값이 1이면 진폭의 변화가 없음을 의미합니다.

 

frequencyShift

주파수가 이동한 양입니다. 값이 0이면 주파수 이동이 없음을 의미합니다.

 

priority

값이 128이면 기본 우선순위를 나타냅니다. 값이 낮을수록 우선순위가 높으며, 그 반대도 마찬가지입니다.


좋은 예시

  • Haptic Clip Player가 더 이상 사용되지 않을 때 해제하는 것이 중요합니다. Release() 메서드를 사용하여 이 작업을 수행합니다.
  • 앱이 종료되려고 할 때는 Haptics SDK를 해제하는 것이 중요합니다. 정적 메서드를 호출하여 이 작업을 수행해줍니다. HapticInstance.Uninitialize();
  • 햅틱 진폭의 경우 Haptic Player와 진동을 유발하는 물체 사이의 상대적 거리를 생각해서 설계를 하면 됩니다. 예를 들어, 소리가 크게 나오는 스피커 근처에 가면 떨림이 강해지는 것을 상상하시면 될 것 같습니다.
  • 약간의 진폭수와 주파수 변조가 필요한 경우를 잘 생각해보시길 바랍니다. 예를 들어, 총게임에서 항상 동일한 Haptic Feedback이 주어지면 생동감이 많이 떨어지겠죠? 일정한 진폭수와 주파수 변조가 필요한 경우도 있습니다. 상황을 잘 설계하세요.

 


최신 업데이트 내용

버전이 업데이트되면서 에어링크를 통해 에디터 화면에서 햅틱이 되지 않던 문제가 해결이 되었습니다.

이제 에어링크를 통해서 햅틱 테스트를 경험할 수 있습니다.