🎮Unreal4/C++_TPS

[UE4] 권총(Pistol) 추가&애니메이션 제작(본마다 레이어로 블렌딩, 본 트랜스폼 변경)

공대 컴린이 2023. 3. 21. 19:10
728x90

👉🏻 Pistol 권총

앞서 구현했던 AR4 소총과 AK47 소총을 잘 완성시켜놨다면 권총을 무기로 추가하는 것은 매우 간단하고 반복적인 작업이다.

Pistol 클래스를 생성한 뒤, AK47의 클래스를 대부분 복사해온 뒤, 몽타주나 에셋 레퍼런스, 총마다 다른 몇몇 설정 값들만 변경하면 쉽게 권총을 무기로 추가할 수 있다. (구조를 잘 짜놨기 때문에 가능한 부분이다)

🕺🏻 Pistol 애니메이션

권총을 구현할 때 가장 어려운 부분은 권총의 애니메이션을 구현하는 것이었다.

권총은 권총을 쥐고 조준하는 에임 오프셋이 따로 존재하지 않고, 단순 Idle 동작만 존재한다.

 

Rifle Aim Offset Pistol Idle

 

따라서 소총의 에임 오프셋 권총의 Idle 애니메이션블렌딩하여 권총의 Aim 애니메이션을 구현하였다.

 

이때 권총의 Idle 모션의 양 팔(어깨)만 Rifle 애니메이션에 추가해야 Rifle의 AO(Aim Offset)을 살릴 수 있다.

Pistol Idle을 그냥 상체로 블렌딩하면 AO가 전혀 먹지않고 상체 통째로 Idle로 변경되기 때문이다.

 

따라서 AO Rifle에 본마다 레이어로 블렌딩을 시킬 때 왼쪽 어깨와 오른쪽 어깨를 각각 블렌드 포즈로 설정해주었다.

 

이때 사용되는 PitchWorld 공간에서 구한 캐릭터의 Pitch 값이다. 즉, 캐릭터 팔의 X축 회전을 구해서 Pistol의 Aim Offset을 구현하는 것인데, Pitch의 값이 음수이면 캐릭터가 위를 쳐다보기 때문에 팔은 하늘을 향해야 한다.

따라서 Pitch 값에 -1를 곱해서 캐릭터의 시선과 팔의 방향을 맞춰주었다.

 

이후 본 트랜스폼 변경을 통해 각각 왼팔과 오른팔의 회전을 적용시켜주었다.

양팔을 프로그래밍에서 Bone의 값을 수정하므로 이러한 애니메이션 연산은 Component 공간에서 이루어져야 한다.

 

따라서 본 트랜스폼의 Translation SpaceComponent Space로 설정하였다.

 

이후 왼팔과 오른팔 각각에 Pistol Idle 애니메이션을 Component Pose로 연결하여 성공적으로 Pistol Idle의 팔모양을 본마다 레이어로 블렌딩하였다.

 

본마다 레이어로 블렌딩할 때 섞는 기준을 설정해야 한다.

Bone Name에는 어디 Bone에서부터 Blend Pose를 덮어씌울 것인지 설정하는 부분인데, spine은 왼쪽과 오른쪽의 구분이 없기때문첫번째로 왼쪽과 오른쪽이 나뉘어져 있는 clavicle_l, clavicle_r을 기준으로 설정하였다.

Depth는 1로 설정하여 팔 모양이 100% 섞여 보이도록 하였다.

 

이후 Pistol을 실행시켜보면 애니메이션 블렌딩이 잘 적용되어 실행되는 모습을 확인할 수 있었다.

 

권총의 Aim 모드에서는 AK47에서와 같이 1인칭 모드로 쏠 수 있도록 구현하였다.

728x90