XR Interaction Toolkit Animated Hands (Grip, Pinch)
VR/XR Interaction Toolkit 2023. 12. 27. 12:12https://youtube.com/playlist?list=PLTFRwWXfOIYBIPKhWi-ZO_ITXqtNuqj6j&si=XhyHS26tNDP6u7CA
새 씬을 만들어 주고
메인 카메라를 제거 하고 XR Origin을 생성 한다
Left / Right Controller 오브젝트를 선택하고 XR Controller 컴포넌트를 제외하고 모두 제거 한다
Left Controller를 선택하고 다음과 같은 구조로 빈오브젝트를 생성한다
Left Controller를 선택하고 Model Prefab과 Model Parent를 넣어준다
오른쪽도 동일하게 진행한다
Offset을 설정해 손의 위치와 회전을 설정 한다
애니메이션 잡기
왼손 프리팹모드로 들어와
Animation을 선택한다
Create버튼을 누르고
애니메이션을 저장 한다
Hand_L_Grip
레코드 버튼을 누르고 손을 접어 준다
이제 레코드를 해제 한다
Pinch 애니메이션 만들기
새로운 클립을 생성하고
저장한다
다시 레코드 버튼을 누르고 손을 접어준다
이제 레코드를 해제 한다
완전히 편 손 애니메이션 만들기
새로운 클립을 만들고
저장한다
기본이 펴진 상태이기 때문에 키는 안잡아도 된다
애니메이터 컨트롤러를 더블클릭하고
안에 있는 State를 제거 한다
블랜드 트리를 생성하고
Float 형식으로 Grip, Trigger 파라미터를 생성하고 기존에 있던 것은 제거 한다
팝업이 뜨면 그냥 지우겠다고 하면된다
블랜드 트리를 선택 하고
블랜드 트리를 선택하고 인스펙터에서 Blend Type을 2D Freeform Cartesian을 선택 한다
Add Motion Field를 4개 만든다
Pose X, Y 를 다음과 같이 설정 하고
다음과 같이 모션을 넣어 준다
손을 넣어주고
빨간 점을 이용해 모션이 동작 하는지 확인 한다
스크립트를 만들어 다음과 같이 작성하고 프리팹에 부착 한다
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
public class Hand : MonoBehaviour
{
public InputDeviceCharacteristics inputDeviceCharacteristics;
private InputDevice _targetDevice;
[SerializeField] private Animator _handAnimator;
private void Start()
{
InitializeHand();
}
private void InitializeHand()
{
List<InputDevice> devices = new List<InputDevice>();
InputDevices.GetDevicesWithCharacteristics(inputDeviceCharacteristics, devices);
if (devices.Count > 0)
{
_targetDevice = devices[0];
}
}
private void Update()
{
if (!_targetDevice.isValid)
{
InitializeHand();
}
else
{
UpdateHand();
}
}
private void UpdateHand()
{
SetAnimatorParameterValue(CommonUsages.grip, "Grip");
SetAnimatorParameterValue(CommonUsages.trigger, "Trigger");
}
private void SetAnimatorParameterValue(InputFeatureUsage<float> feature, string parameterName)
{
if (_targetDevice.TryGetFeatureValue(feature, out float value))
{
_handAnimator.SetFloat(parameterName, value);
}
else
{
_handAnimator.SetFloat(parameterName, 0);
}
}
}
이때 Input Device Characteristics 는 Controller, Left를 선택 한다
실행후 결과를 확인해보자
인덱스 트리거를 눌렀을때 Pich가
핸드 트리거를 눌렀을때 Grip 애니메이션이 실행되는지 확인한다
오른손도 동일하게 작업 한다
프리팹을 선택하고
애니메이션 창을 열고
저장하고
레코드 버튼을 누르고
손 모양을 잡아준다
새 클립을 만들고
다시 저장 하고
레코드 버튼을 누르고 손 모양( Pinch)를 잡아 준다
다시 새 클립을 만들고
Hand_R_Open으로 저장한다
기본형이 펴진 상태기 때문에 키는 안잡아도 된다
핸드 프리팹을 선택하고
컨트롤러를 더블클릭하고
안에 있는 State들을 제거 한다
Float 형식으로 2개의 파라미터 (Grip, Trigger)를 만들어 주고
블랜드 트리를 생성하고 더블 클릭해서 들어간다
인스펙터에서 2D Freefrom Cartesian을 선택하고
다음과 같이 파라미터를 설정 한다
+ 버튼을 눌러 Add motion field 를 4개 생성하고
다음과 같이 설정 한다
이제 블랜드 트리의 슬라이더를 이용해 애니메이션 동작을 확인 한다
핸드 프리팹을 선택하고 Hand 스크립트를 부착 한다
이때 Input Device Characteristics는 Controller, Right를 선택하고
Hand Animator는 위에 있는 Animator 컴포넌트를 넣어주면 된다
플레이 해보고 두 손 모두 애니메이션이 잘 나오는지 확인 하자
'VR > XR Interaction Toolkit' 카테고리의 다른 글
[OpenXR] XR Interaction Toolkit 2.4.3 (Two Hand Grab) (0) | 2023.12.28 |
---|---|
[XR Interaction Toolkit 2.4.3] Custom Hand Grab Pose (0) | 2023.12.27 |
Access hand data from Unity components in the scene (0) | 2023.12.27 |
XR Interaction Toolkit 2.4.3 OpenXR Throw Object (0) | 2023.12.27 |
XR Interaction Toolkit 2.4.3 (OpenXR) Animated Hand Model (0) | 2023.12.26 |