개요
VR(퀘스트2) 컨트롤러의 트리거(검지)와 그립 버튼(중지)에 따라 캐릭터의 손이 집게손가락이 되거나 주먹을 쥐게 해 보자.
이전에 진행했던 VR 기기와 캐릭터 모델이 연동된 상태에서 계속한다.
[Unity] VR 캐릭터 리깅 및 연동하여 조작하는 방법
개요 오늘 작업을 진행하기 전 먼저 유니티에서 퀘스트와 연동해 주자. [Unity] VR 퀘스트2 연동(OpenXR 플러그인 세팅) 개요 유니티에서 VR 환경을 구축하기 전 어떤 VR 기기를 표준으로 해야 할지 정
teinoi.tistory.com
컴포넌트 세팅
아래 패키지 파일을 다운받고 프로젝트에 임포트한다.
VR Character Hand.unitypackage
0.01MB
1. 캐릭터 오브젝트에 Animator 컴포넌트를 추가
(Avatar 항목에 캐릭터 모델 아바타가 할당되어 있는지 확인)
2. Controller 항목에 임포트했던 VR Hand Animator를 할당
3. 캐릭터 오브젝트에 임포트했던 Hand Animation 스크립트를 추가하고 위 이미지 같이 할당한다.
(Animator 항목은 추가했던 컴포넌트를 할당한다.)
할당하는 레퍼런스는 다음과 같다.
XRI LeftHand Interaction/Activate Value : 왼쪽 컨트롤러 트리거
XRI LeftHand Interaction/Select Value : 왼쪽 컨트롤러 그랩 버튼
XRI RightHand Interaction/Activate Value : 오른쪽 컨트롤러 트리거
XRI RightHand Interaction/Select Value : 오른쪽 컨트롤러 그랩 버튼
애니메이터 세팅
VR Hand Animator 애니메이터는 왼손과 오른손 레이어로 구성되어 있다.
이렇게 레이어가 두 가지 이상 있을 때 Mask를 구분하지 않으면 Mask가 겹치게 되어 Base 레이어만 작동한다.
위 이미지같이 왼손만 분리하여 사용할 애니메이션을 왼손만 적용한다.
오른손도 이런 식으로 적용하여 Mask가 겹치지 않게 한다.
레이어에 Mask 항목에 각각 할당하고 Weight 항목을 1로 조정한다.
아바타 마스크(Avatar Mask) - Unity 매뉴얼
마스킹을 하면 클립 내에 있는 애니메이션 데이터의 일부를 무시할 수 있으므로, 클립에서 오브젝트나 캐릭터의 전체가 아닌 일부만 애니메이션화할 수 있습니다. 예를 들어, 팔과 다리의 모션
docs.unity3d.com
Blend Tree를 사용하여 파라미터의 수치에 따라 손을 편 상태, 주먹을 쥔 상태, 집게손가락 상태로 애니메이션을 전환한다.
좌표에서 X는 컨트롤러의 그랩 버튼, Y는 컨트롤러의 트리거이다.
그랩 버튼과 트리거를 누르는 세기를 수치로 0~1로 나타내어 다음과 같이 애니메이션을 전환한다.
X : 0, Y : 0 = 손을 편 상태
X : 0, Y : 1 = 주먹을 쥔 상태
X : 1, Y : 0 = 집게손가락 상태
X : 1, Y : 1 = 주먹을 쥔 상태
손 애니메이션은 오브젝트의 Transform을 조정하여 제작하지 않고 Animator 상의 손가락 뼈대를 조정하여 제작했다.
그래서 손가락 뼈대가 리깅되어있는 3D 캐릭터 모델이라면 호환하여 사용할 수 있다.
실행 결과
이러한 방법을 사용하면 손뿐만 아니라 달리기 같은 다른 애니메이션도 VR 기기를 연동하여 조작할 수 있다.