XR Interaction toolKit IndexTouch 인식 이슈

2022. 6. 30. 01:30Unity/VR

이번 포스팅은 VR개발중 Hand Animation이나 XR Ray를 조정할때 CommonUsages.indexTouch를 쓰는 것이 불가능할 때 이를 해결 할 솔루션을 적을 생각이다. 

자료를 찾아본 바로는 thumbTouch도 같은 방법으로 해결할 수 있을 것 같다.


먼저 XR Interaction Debugger에는 이렇기 IndexTouch의 상태가 잘 나타나는 것을 볼 수 있는데 이를 보면 하드웨어적 문제가 없다는 것을 알 수있다.

 

그렇다면 스크립트 상의 문제인데 몇번 시도해본 바로는 일단 CommonUsages.indexTouch는 위의 parameter를 보면 Boolean타입으로 나오는데 스크립트상에서 out의 타입을 bool로 적으면 컴파일 에러가 발생한다. 

이는 유니티 문서에서 indexTouch는 float를 지원한다길래 out을 float로 바꾸면 일단 컴파일에러는 발생하지않는다.

 

left_Controller.inputDevice.TryGetFeatureValue(CommonUsages.indexTouch, out float indextouch)

하지만 위 코드처럼 작성하게 되면 위의 값은 항상 false가 되어 if문을 절대로 통과하지 못한다. 물론 !키워드를 통해 if문을 통과시켜도 항상 out은 0으로 고정 되었다.

 


해결

이 해결은 XR Interaction Toolkit자체의 문제이기 때문에 다른 패키지를 쓸 필요가 있다. 바로 Unity.XR.Oculus이다.

if (left_Controller.inputDevice.TryGetFeatureValue(Unity.XR.Oculus.OculusUsages.indexTouch, out bool indextouch))
{

}

물론 TryGetFeatureValue함수를 계속 써주면서 CommonUsages만 Unity.XR.Oculus.OculusUsages로 바꿔주면 된다.

이렇게 하면 굳이 타입을 float가아닌 제대로 된 형식 bool로 받아 줄 수있고 out의 값도 아주 잘 출력 되는 것을 볼 수 있다.

 

이렇게 문제를 해결하면 XR Interaction Toolkit을 메인으로 개발을 진행해도 버그가 발생해 출력 안되는 값만 Oculus에서 가져온다면 섬세한 손 애니메이션등을 구현할 수 있을 것이다.