2024. 9. 4. 23:34ㆍUnreal Engine
적이 플레이어와 만나자마자 공격하게 만들기
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 이름의 섹션을 하나 추가한다.
섹션 설정도 아래와 같이 설정하면 쓰러진 후 계속 누워있게 된다.
'Unreal Engine' 카테고리의 다른 글
새로운 메타버스 월드 "칼리버스(CALIVERSE)" 후기 (0) | 2024.09.06 |
---|---|
[Unreal] 29일차 - 죽는 애니메이션 후 적이 사라지게 설정, 적 네비게이션 설정, 적 생성 Spawn Points (1) | 2024.09.06 |
[Unreal] 27일차 - Die State, 적 애니메이션 적용(Idle, Move, Attack) (0) | 2024.08.27 |
[Unreal] 26일차 - 넉백 구현 방법(이동 계산, 거리 Lerp 계산, 시간 Lerp 계산), Die State (0) | 2024.08.23 |
[Unreal] 25일차 - Enemy Attack State 함수, Move 전환, Damage State 함수, 넉백(Knockback) (0) | 2024.08.23 |