[UE5][VR] Unreal Engine 5 VR Study (5)

suhan0304·2023년 12월 2일
0

Unreal Engine 5

목록 보기
5/10
post-thumbnail

애니메이션

BP_Hand에 스켈레탈 메쉬가 들어가 있기는 하지만 별도로 애니메이션이 들어가 있지않다. 따라서 애니메이션 블루프린트를 만들어 애니메이션을 추가해보자.

적절한 위치에 Animation Blueprint를 생성해주자. 이 때 뼈대는 SK_MannequinsXR을 사용한다. 이름은 ABP_Hand라고 설정한다.


ABP_Hand

Grasp와 Idle을 각각 연결해서 살펴보면 Grasp는 쥔 상태, Idle은 핀 상태인 것을 확인할 수 있다.

PoseAlphaGrasp라는 변수를 선언해서 0과 1의 값을 갖도록 Value Range를 설정한 후 Blend를 이용해 아래와 같이 노드를 설정한다.

이렇게 설정하면 변수 PoseAlphaGrasp 의 값에 따라서 두 애니메이션이 적절하게 반영되서 나타난다. 컴파일 한 후 변수의 값을 0~1로 조절해보면서 어떻게 나타나는지 확인해보자.

블렌드 노드에 대해서 자세한 설명은 공식 문서를 참고하자

이제 ABP_Hand를 BP_Hand의 애니메이션 클래스에 연결 시켜준다.


Grasp Action

잡기 액션을 새로 만들어 주어야한다. 인풋 액션으로 IA_VR_Grab_Left와 IA_VR_Grab_Right를 생성해주고 다음과 같이 설정한다.

Grab Left

Grab Right

이제 IMC에서 해당 액션들을 매핑 시켜주자.

더 많은 기기들과 매칭시키고 싶다면 Sample을 참고하도록 하자.

이제 BP_Pawn을 가면 BP_Pawn에서는 IMC_VR_Default를 이미 사용하고 있기 때문에 우리가 추가한 Grab Left와 Grab Right 이벤트를 바로 사용 가능하다.

추후에 잡기 이벤트를 구현할 에정이기 때문에 BP_Hand로 돌아가서 TryGrab이라는 함수와 TryRelease라는 함수를 만들어준다.

BP_Hand를 따로 별도의 클래스로 빼서 묶어놓아서 Grab과 Release도 BP_Hand 클래스 내부에 구현 가능하다. 이렇게 사용하면 기능이 많아지더라도 BP_Pawn의 BP가 너무 커지는 것을 방지할 수 있다.

이제 만들어진 함수를 BP_Pawn에서 Grab 이벤트에 연결시켜준다. Grab을 시작하면 Try Grab 함수를 호출, Grab이 종료되면 Try Release 함수를 호출하도록 이벤트와 함수 노드를 연결한다.


애니메이션 추가

그렇다며 애니메이션 컨트롤을 어떻게 해야할까?

  1. Try Grab 함수 쪽에서 애니메이션 블루 프린터에 접근해서 애니메이션 수정
  2. 애니메이션 블루프린트 상에서 위로 찾아 올라가서 거꾸로 세팅하는 방법

위처럼 두 가지 방법이 있다. 두 가지 중 원하는 방법을 사용하자. 1번 방법을 사용해 애니메이션을 구현했다.

아래와 같이 Hand Mesh의 Anim Instance를 가져온다. 이 때 Anim Instance을 상속받은 ABP_Hand가 있으므로 Cast To ABP_Hand로 ABP_Hand를 갖고 올 수 있고 Set으로 Pose Alpha Grasp 변수 값을 1로 세팅한다.

Try Release는 위와 동일한데 변수값만 0으로 세팅한다.

하지만 이런 방식으로 구현하면 한 프레임 만에 값이 0에서 1로 바로 변하면서 애니메이션이 뚝뚝 끊기는 느낌이 들 것이다. 그러므로 다음과 같이 보정을 통해 부드럽게 연출되도록 한다.

이렇게 FInterp To 노드를 사용하면 Current 값이 Target 갑까지 천천히 Delta Time 단위로 서서히 증가하게 된다. (속도, Interp Speed는 적절히 설정한다.) 이렇게 되면 CurrentPoseAlphaGrasp는 PoseAlphaGrasp 값을 향해 천천히 증가하게 될 것이고 천천히 증가하는 값을 다시 CurrentPoseAlphaGrasp에 저장해준 다음에 아래와 같이 Blend의 Alpha로 CurrentPoseAlphaGrasp를 넘겨주면 0에서 1로 바로 안변하고 천천히 변하는 듯한, 부드러운 애니메이션을 연출할 수 있다.

이러한 애니메이션 블렌딩 과정을 따로 해줄 수 도 있다.


블렌드 스페이스

블렌드 스페이스로 따로 별도로 블렌드 효과를 만들어줄 수 있다. Animation 폴더에 BS_Hand라는 이름으로 블렌드 스페이스를 만들어준다.

다음과 같이 Horizontal Axis의 이름을 PoseAlphaGrasp라고 해준 후 Maximum Axis Value를 1로 설정해서 0과 1 값이 들어가도록 하고 Snap to Grid를 활성화한다.

이제 에셋을 찾아서 Idle 상태를 0에 Grasp 상태를 1에 드래그해서 놓고 Ctrl을 누른체 마우스를 움직여 애니메이션의 변화를 확인한다.

이렇게 블렌더 스페이스로 만들면 다음과 같이 간단하게 플렌더 효과를 나타낼 수 있다.

오른쪽의 Asset Brower에서 BS_Hand를 끌어와 쉽게 사용 가능하다.

이러한 블렌더 스페이스의 장점은 직접 코드로 아까 만들어서 관리하는 것보다 이렇게 따로 만들어서 바로 끌어와 사용하는게 편리할 뿐더러 추후에 애니메이션 관련 변수가 두 개가 되어가지고 X축, Y축에 따라서 애니메이션을 섞어야 한다면 이러한 블렌더 스페이스 방식이 수월하다.


Grab 테스트

이제 그랩 애니메이션이 잘 작동하는지 실제로 플레이해보자.

profile
Be Honest, Be Harder, Be Stronger

0개의 댓글