본문 바로가기
Unreal/Manual

Unreal 캐릭터 AimOffset 구현하기

by Dev_카페인 2023. 11. 24.
반응형

[Unreal] 캐릭터 AimOffset 구현하기

에임 오프셋은 캐릭터의 무기 조준시 도움이 되는 블렌딩가능 포즈 시리즈가 저장된 애셋입니다.

여러가지 면에서 에임 오프셋은 BLend Space(블렌드 스페이스)와 똑같습니다.

 

캐릭터를 구현할 때 이동 기능과 회전 기능이 있다면 상향 가운데, 가운데, 하향 가운데 3개의 AimOffset만으로 충분합니다. 한 장소에 멈춰 있는 경우에만 9방향이나 15방향 AimOffset 기능 구현을 고려하는 것이 좋습니다.

 

준비

1. 사용하려는 캐릭터의 스켈레탈 메시와 기본 애니메이션

2. 에임 오프셋으로 만들 최소 9방향 애니메이션

 

본 글에서는 15방향 에임 오프셋을 제작할 예정입니다.

 

에임 오프셋은 애디티브 에임 타입의 메시 스페이스를 가진 애니메이션만 받습니다!

 

에임 오프셋에 대한 설명이 궁금하다면 언리얼 엔진 문서를 참조 바랍니다.

 

에임 오프셋

Aim Offset, 에임 오프셋은 캐릭터의 무기 조준시 도움이 되는 블렌딩가능 포즈 시리즈가 저장된 애셋입니다.

docs.unrealengine.com

에임 오프셋 관련 애니메이션을 보유하지 않았을 경우 Animation Starter pack을 다운로드 받아 제작해 주세요.

 

에임 오프셋 만들기

에임 오프셋을 사용하여, 캐릭터가 마우스 또는 컨트롤러 방향으로 무기를 조준하도록 합니다.

docs.unrealengine.com

 

먼저 콘텐츠 브라우저에서 에임 오프셋을 생성합니다.

에임 오프셋의 기반이 될 스켈레톤을 선택합니다.

여기서는 Paragon:TwinBlast를 다운로드 받아 사용했습니다.

 

생성이 완료되면 에셋을 열어 다음과 같은 화면을 확인할 수 있습니다.

 

먼저 작업할 것은 가로축과 세로 축의 값을 수정하는 것입니다.

가로축은 Horizontal로 사용할 예정이며 회전 값 -180 ~ 180 사이의 값을 가집니다.

세로축은 Vertical로 사용할 예정이며 위 아래 -90~90사이의 값을 가집니다.

Horizontal 값은 왼쪽 뒤, 왼쪽, 정면, 오른쪽, 오른쪽 뒤의 값을 나타내도록 4개의 그리드를 사용하였고

Vertical 값은 상단, 중앙, 하단의 값을 나타내도록 2개의 그리드로 나누었습니다.

우측 하단 에셋 브라우저에서 애니메이션을 가져옵니다.

Paragon : TwinBlast 에셋에서는 AO_{Horizontal}{Vertical}의 이름을 가지고 있습니다.

예를들어 AO_LBU의 경우 AimOffset_LeftBackUp의 값을 가집니다.

그리드에 따라 AimOffset 애니메이션을 배열하자면 다음과 같습니다.

AO_LBU, AO_LU, AO_CU, AO_RU, AO_RBU

AO_LBC, AO_LC, AO_CC, AO_RC, AO_RBC

AO_LBD, AO_LD, AO_CD, AO_RD, AO_RBD

 

배치 후 프리뷰 애니메이션이 보이지 않거나 문제가 발생한다면 프리뷰 베이스 포즈와 애니메이션 애디티브 세팅을 확인해 봐야합니다.

 

먼저 가지고 있는 AimOffset (본 글에서는 AO_CC)애니메이션을 열어 에셋 디테일의 애디티브 세팅(Additive Setting)에서 애디티브 애님 타입(Additive Anim Type)이 Mesh Space로 설정되어있는지 확인합니다.

Mesh Space로 설정되지 않은 애니메이션은 원하는 동작을 하지 않을 수 있습니다.

두번째로 에임 오프셋 파일의 애디티브 셋팅 중 프리뷰 베이스 포즈가 AimOffset애니메이션으로 되어있다면 프리뷰에 표시되지 않을 수 있습니다. 이는 기본 베이스 애니메이션을 가져올 수 있어야 합니다.

본 글에서는 Idle 포즈로 잡았습니다.

 

세팅이 완료되었다면

작업이 되어 있는 ABP (애니메이션 인스턴스 블루프린트)파일을 열어 에임 오프셋을 추가해줍니다.

여기서 가로축과 세로축읜 Aim Horizontal과 Aim Vertical 값은 C++ 코드로 작업했습니다.

블루프린트에서도 GetPawnOwner()을 호출한 후 GetBaseAimRotation 값을 호출할 수 있습니다.

 

 

반응형