[Unreal] 28일차 - 적 공격 타이밍 수정, 적 피격 애니메이션(Animation Montage), 적 죽음 애니메이션

2024. 9. 4. 23:34Unreal Engine

728x90
반응형

적이 플레이어와 만나자마자 공격하게 만들기

BP_EnemyFSM의 MoveState로 간다.

가장 뒤 노드에 Current Time에 Attack Delay Time을 세팅했다.

 

 


 

 

변수 Private 설정

BP_EnemyFSM에서 설정했던 많은 상태는 BP_Enemy에 컴포넌트 형태로 사용하고 있다.

따라서 BP_Enemy의 BP_EnemyFSM을 선택해보면 Details 창에서 만든 변수를 수정할 수 있다.

 

 

Attack Delay Time을 2,0 -> 3.0으로 변경

 

 

일부 변수들은 굳이 보여지지 않아도 되기 때문에 Private 설정을 할 수 있다.

BP_EnemyFSM에서, 변수 선택 후 Private 체크

 

 

필요한 값은 놔두고 나머지는 Private 처리 했다.

 

 


 

 

적 Damage(피격) 애니메이션

유니티의 AnyState처럼 어떤 상태에서든 작동할 수 있도록 설정할 수 있다.

Add State Alias로 AnyState 이름을 생성하여 Damage 애니메이션과 연결하면 된다. 우측 Details에서 AnyState로 넘어갈 수 있는 다른 애니메이션을 체크하면 된다.

 

 

AnyState에서 Damage로 향하는 트랜지션을 더블클릭하여 아래의 노드를 연결한다.

 

 

Damage에서 Idle로는 자동으로 넘어가도록 설정.

 

 


 

 

하지만 이 방법을 쓰지 않고 몽타주를 이용할 것이다.

피격 애니메이션 몽타주

Animations 폴더 안에 Animation Montage 생성

 

 

뱀파이어 선택, 이름은 EnemyDamageMontage로 설정

 

 

몽타주 원리 -뜯어붙이기

 

 

우측 하단 Asset Browser에서 필요한 애니메이션을 활용한다.

애니메이션 드래그 앤 드랍

 

 

섹션 이름을 Damage0으로 변경

 

 

섹션 부분에 우클릭 후 새로운 섹션 생성, Damage1으로 이름을 설정했다.

 

 

중간에 test0, test1 섹션을 임시로 만들어놓고 우측하단 Montage Sections에서 Clear 버튼을 누르면 정렬이 된다.

 

 

우측 상자를 눌러서 다음 섹션을 설정하고 원하는 섹션만 반복할 수 있다. 자기자신을 다음 섹션으로 설정하면 그 부분만 반복된다.

 

 

테스트 지우고 다시 원래대로 Clear 눌러서 둔다.

 

 

슬롯 추가

Window - Anim Slot Manager 창을 연다.

 

 

MyDamageSlot을 추가했다.

 

 

DefaultSlot의 우측에 드롭다운에서 MyDamageSlot으로 설정, 몽타주 창을 닫고 다시 열면 애니메이션이 실행된다.

 

 

피격을 받으면 Damage0 또는 Damage1 섹션을 랜덤으로 실행하게 할 것이다.

 

 

ABP_Enemy의 AnimGraph에서, Default Slot 검색해서 노드 추가 후 연결한다.

 

 

MyDamageSlot으로 설정

 

 

ABP_Enemy의 EventGraph에서, Add Custom Event로 PlayDamageAnim 이름의 노드를 생성했다.

 

 

BP_EnemyFSM에서 OnDamageProcess 함수로 간다.

변수에서 Anim을 가져오고 Play Damage Anim 노드를 추가해서 연결한다.

 

 

다시 ABP_Enemy로 와서, 랜덤으로 피격이 구현되도록 노드를 구성한다.

 

 

Damage0과 Damage1이 잘 뜨는 것을 볼 수 있다.

 

 

그대로 ABP_Enemy에서 Print String을 지우고 Play Montage 노드를 연결한다.

Get Owning Component를 만들어서 연결했고, Montage to Play에서 만들었던 EnemyDamageMontage를 설정했다.

 

 

잘 작동되는 것을 볼 수 있다.

 

 


 

 

적 죽음 애니메이션

적이 죽는 애니메이션도 EnemyDamageMontage에 이어서 작업하도록 한다.

Zombie_Death 애니메이션 드래그 앤 드랍

 

 

Die 이름의 섹션도 새로 만들어서 설정했다.

 

 

Montage Sections 창에서 Clear를 눌러 초기화 한다. 다른 섹션에 이어서 재생되지 않도록.

 

 

ABP_Enemy 왼쪽에서, PlayMyMontage라는 함수를 새로 만들었다.

 

 

함수를 아래와 같이 연결한다.

 

 

다시 ABP_Enemy의 EventGraph로 돌아와서, PlayMontage 노드를 지우고 그 부분에 만든 함수를 넣으면 된다. 잘 작동한다.

 

 

그 밑에 Custom Event로 PlayDieAnim 이름의 노드를 만들고 다시 함수를 가져와서 연결한다.

Section Name에 Die를 쓴다.

 

 

참고용 ABP_Enemy의 EventGraph 전체 노드

 

 

BP_EnemyFSM의 OnDamageProcess로 가서 죽음 관련 애니메이션 작업을 해야 한다.

Anim 변수 가져와서 PlayDieAnim 검색해서 연결한다.

 

 

참고용 BP_EnemyFSM의 OnDamageProcess 전체 노드

 

 

죽는 모션까지 잘 나온다. 하지만 아직 어색한 부분이, 적이 완전히 쓰러진 후 바닥에 가라앉아야 하는데 그 설정이 되어있지 않다.

 

 

EnemyDamageMontage에서 가장 마지막 부분에 DieEndLoop 이름의 섹션을 하나 추가한다.

 

 

섹션 설정도 아래와 같이 설정하면 쓰러진 후 계속 누워있게 된다.

728x90
반응형