Unreal Engine/게임클래스 - 언리얼엔진 기초

[20강] Animation Montage

whereareyoung 2023. 10. 12. 13:43

< 서론 >

좋은아침이다! 하고 작업중이던 파일을 열었는데 로드에러가 뜨고 심난했다. 

그냥 파일만 바꿔껴주면 되겠거니 하고 이전에 작업한 내용 살펴보면서 커피도 마시고 간식도 먹고 했다. 

 

개선해야할 사항 두가지를 발견하고 해결했다. 

 

1. 칼 파일 로드 에러 

--1) 문제원인 파악

저번에 실수인데, 오늘 파악했다. Character 폴더에 Sword 폴더에 칼 자료, Weapon 폴더에 칼자료 이 두가지를 섞어 사용하고 Sword 폴더 칼 자료를 필요없다고 삭제했다. 뭐가 뭔지 정리가 안되고 확실치 않음 작업하다가 삭제한 쪽 자료가 사용되는 부분에서 문제가 되는거였다. 

--2) 확실하게 해결하기 위해 칼을 다 삭제, 다시 Weapon폴더에 넣고 칼 리임포트, 칼 블루프린트 다시 만듦 

--3) BP_Player 블루프린트에서 Begin Play Event 다시연결하고 게임 시작시 칼 생성하는거 다시만듦

--4) Sword Event에서 Grab / Ungrab 칼 블루프린트 사용했던것도 다시만듦

   * BP_Sword 를 썼다가 변수자료형으로도 사용해서 썼었는데 없앴다가 다시 쓰니까 자료형이 바뀌어서 다들 업데이트 했어야 했음 

 

2. 칼 들고 점프할 경우 애니메이션이 없음 

점프는 가능한데, 애니메이션이 아직 존재하지 않아 부자연스럽다. 

-- 1) Mixamo.com 에서 "Sword And Shield Jump" 파일을 서치함 

-- 2) 점프파일 두가지를 발견. 하나는 제자리 점프, 하나는 앞으로 점프해서 뛰는 동작. 더 예쁜걸로 고르고 싶어서 테스트 앞으로 점프해서 뛰는 동작 "in Place" 로 테스트 해도 별로이길래 제자리 점프파일을 다운로드 받음 (without skin)

-- 3) unreal 로 불러오기 위해 skeleton 컨버팅 

-- 4) 애니메이션 블루프린트에 넣고 무기장착 애니에서 in air 일때 Jump 애니메이션으로 transition, in air not 일때 무기 장착 애니메이션으로 전환 

--5) 테스트 후 쾌적함을 위해서 in air 일때 전환기간 0.001로 설정 

 

아무튼 오늘 강의 시작이다! 

 

< 플레이어 공격 애니메이션 구현 >

1. mixamo.com > character "ybot" > Animation 다운로드 

--1) Stading Melee Attack Downward, overdrive 100, without skin

--2) Standing Melee Attack Horizontal, overdrive 70, without skin

--3) Stading Melee Attack 360 High, overdrive 70, without skin

  * overdrive : 플레이 속도, 쾌적한 플레이를 위해 높임

  * Root motion 이 적용되지 않은 애니메이션은 사용하지 않는 것이 편하다. 

기존의 Sword And Shield 파일의 경우 이동하며 공격하는 파일이 많은데, 이 경우 애니메이션 실행 후 0, 0, 0 으로 돌아가기 때문에 mixamo에서 "In place"로 다운로드 하거나 언리얼에서 "enable root bone" 을 사용할 수 있다. 하지만 enable root bone 기능의 경우 움직이지 않는 루트 본이 존재해야 사용가능하다. 애니메이션도 이상하게 출력된다. 블렌더 등의 툴을 사용해 본을 하나 더 달아서 고정시켜야 하는데 언리얼 상에서는 프로그램으로 처리가 복잡하니 디자이너에게 맞기면 편하다. 

 

2. 다운로드 받은 애니메이션 파일들 언리얼 작업에 적합하게 컨버팅

보기에는 달라지지 않았지만 bone 이름등이 언리얼에 적합하게 컨버트 되었다. 

 

3. 언리얼 "mixamo"작업파일로 옮기기 > rename 

 

--1) Stading Melee Attack_1

--2) Stading Melee Attack_2

--3) Stading Melee Attack_3 

콤보 공격을 구성하기 위해 다음과 같이 rename 하였다. 

 

 

4. 애니메이션 리타겟 

작업한 세 가지 파일을 선택, 애님에셋 리타겟 > 애님에셋 복제후 리타겟 

Skeleton 설정해주고 경로는 Character > Animations 로 리타깃 해준다.

세 파일 다 오류없이 임포트 된것을 확인 후 저장하여준다. 

 

5. 애님몽타주 생성 

--1) Character > "Montages" 폴더 생성

--2) 애니메이션 파일들 > 생성 > 애님몽타주 생성 > 만든 몽타주들을 이동 

< 애니메이션 몽타주 > 

   - 애니메이션을 한번 플레이 할 경우에 사용.

   - 플레이 시키려면 슬롯이 필요함

       - Slot 의 이름에 매칭되는 Anim BP 의 위치에서 몽타주가 플레이됨 

예를들어, Jumping 이 플레이 되다가 입력이 들어오면 끊고 Default 이 플레이되며, Slot 이 실행될때 Jumping을 초기화 한 후 다시 연결됨 (추후 해결해야 한는 문제)

   - 몽타주 파일의 경우 notify 가 하위에 추가되어 있으며 기본 Animation 보다 더 다양한 기능이 추가되어 있음 

 

현재까지 진행한 작업의 경우 점프, 무기 grab / ungrab 에 Animation State 를 사용했지만, 이것 역시 Animation Montage로 처리 가능. 

(ex. 공격 애니메이션의 경우 1회성이며, 실행 후 원래 동작으로 돌아감) 

 

6. 애니메이션 몽타주를 플레이 하기 위한 슬롯을 생성 

* * *  슬롯이 지정되어 있지 않다면 플레이가 되지 않음!!

--1) 위에서 생성한 몽타주들의 슬롯은 "Default" 로 되어있음 

--2) "ABP_Player" > "애님그래프" > Default 검색 후 "Default Slot" 슬롯 생성 밑 아래와 같이 연결 

 

7. 어택 입력키 만들기 

--1) 세팅 > 프로젝트 세팅 > 입력 > Action Mappings > " Attacking", 왼쪽 마우스 버튼

 

--2) Attacking 입력액션 > Play Anim Montage 

이제 Attacking 애니메이션이 플레이가 되지만 여러가지 문제점이 인식됨

1. 무기가 있을때 / 없을때 상관없이 진행 

2. 여러번 휘두르는 문제 

3. 휘두르고 난 후 Idle (Unarmed) 로 초기화 되어 플레이 됨

 

8. Attacking 문제 해결 

1) 무기가 있을때 / 없을때 상관없이 진행 + 2)여러번 휘두르는 문제

애니메이션 notify 설정으로 해결   

   --1) if "Branch" 로,  "Drawn" 이 True 일때 (무기 장착시) 공격 애니메이션이 실행 가능하도록 변경

   --2) 변수 "Attacking" 생성, 처음 눌렀을 경우 Attacking 이 "True" 가 되도록 함, 그리고 Attacking 을 눌렀을때 True일때만 몽타주가 플레이 되도록 함 

위 작업까지 진행하였을때, 1회 공격 애니메이션 플레이 후 True 를 False 로 풀 방법이 없어지기 때문에 "Notify" 로 풀어줘야함.

   --3) custom event > "EndAttackig" 생성 

   --4) Notify 생성, rename 

   --5) Notify 내부함수 이름수정 1

   --6) Notify 내부함수 수정 2

   --7) "BP_Player" > "EndAttacking" 에서 Attacking "False" 로 풀어주기

   --8) 애니메이션 몽타주 파일에 Nofity 심기

몽타주 파일 아래에 Notify 심을 곳 있는데 공격이 끝날 때 쯤 심어줌 

(맨 끝보다 살짝 땡겨 하는게 좋음, 콤보로 다음동작 연결예정)

 

<정리>

 

다음시간에는 3번 (휘두르고 난 후 Idle (Unarmed) 로 초기화 되어 플레이 됨) 문제를 해결하는 법을 다루기로 하였다. 

평소보다 조금 피곤한 아침이였지만 강의가 쉽고 재미있어 즐겁게 보낼 수 있었다. 

다음 차시가 기대된다. 

 

'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글

[22강] Enemy  (1) 2023.10.13
[21강] Animation Blending  (0) 2023.10.12
[19강] Spawn Actor & AttachToComponent  (1) 2023.10.06
[18강] Anim Notify  (0) 2023.10.06
[17강] State Machine(Draw / Sheath)  (1) 2023.10.05