UE4 Chapter 4-4. 몬스터 AI : 사망 처리
카테고리: UE4 Lesson 1
태그: UE4 Game Engine
인프런에 있는 황대희님의 언리얼 엔진4 3D 횡스크롤 게임 만들기 강의를 듣고 정리한 필기입니다. 😀
언리얼 엔진 공식 문서 https://docs.unrealengine.com/ko/index.html
사망 처리
🔔 플레이어의 사망 처리
죽는 애니메이션
🚩 “sword_and_shield_death_Monatage” 애님 몽타주
플레이어가 죽는 애니메이션인 “sword_and_shield_death” 에셋을 대상으로 몽타주를 생성해주자.
🚩 “MoveCharBP” 블루프린트 이벤트 그래프
플레이어가 HP < 0 이 되어 죽으면 “sword_and_shield_death_Monatage” 애님 몽타주를 재생하게 하자.
플레이어가 죽으면 몬스터가 더 이상 공격하지 않게 하기
- 플레이어가 죽었는지 아닌지를 나타내는 변수를 만들어서 체크해주어야 한다.
IsDeath
- 👉 “MoveCharBP”의 boolean 변수로, 플레이어가 죽었다면 True
IsDeathPlayerCharacter
- 👉 “DefaultMonsterBP”의 boolean 변수로, “MoveCharBP”의
IsDeath
값을 받아와 저장. 플레이어가 죽었다면 True - 몬스터가 죽었는지 체크할 변수도 만들거라서 이름을 다르게 해서 구분해줌.
- 👉 “DefaultMonsterBP”의 boolean 변수로, “MoveCharBP”의
🚩 “MoveCharBP” 블루프린트 이벤트 그래프
플레이어가 죽었다면 죽는 애니메이션을 재생한 후 IsDeath
값을 True로 설정.
🚩 “DefaultMonsterBP” 블루프린트 이벤트 그래프
Tick 이벤트와 연결되어 매 프레임마다 플레이어와의 거리와 방향을 재는 과정을 실행시켰던 이벤트인 SaceDistAndDir 을 통하여, 이제 거리와 방향 재는 것과 더불어 매 프레임마다 플레이어가 죽었는지를 체크하는 과정을 추가해준다.
- “MoveCharBP”의
IsDeath
값을 가져와 본인의 변수인IsDeathPlayerCharacter
에 이 값을 할당. - SaveDistAndDir 이벤트가 발생하면
- 1️⃣ 플레이어가 죽었는지 체크.
IsDeathPlayerCharacter
업뎃. - 2️⃣ 플레이어와의 거리 체크.
DistancePlayerCharacter
업뎃. - 3️⃣ 플레이어로 향하는 방향 체크.
DirToPlayerCharacter
업뎃.
- 1️⃣ 플레이어가 죽었는지 체크.
🚩 “MonsterState” Enumeration
몬스터의 상태를 하나 더 추가해주었다.
Idle_Ready
- 새롭게 추가한 상태로, 플레이어가 죽어서 정말 몬스터가 이제 아무것도 안하는 Idle 상태이다.
Idle_Combat
- 기존의 Idle 상태를 이름만 바꿔준 것. 플레이어와의 거리를 항상 계산하고 플레이어를 쫓아갈 준비를 하고 있는 Idle 상태.
🚩 “DefaultMonsterBP” 블루프린트 이벤트 그래프
플레이어가 죽으면 Idle_Ready
상태가 될 수 있도록 할 것이다.
1️⃣ 각각의 상태에 따른 처리를 하기 전에, SaveDistAndDir 이벤트를 발생시키고 나면 업데이트 될 IsDeathPlayerCharacter
값이 True라면 Idle_Ready
상태로 변경 후 더 이상 아무 것도 하지 않기. False라면 플레이어가 죽지 않았으므로 거리를 계산해 쫓아갈 준비를 하든(Idle_Combat), 쫓아가든(FollowChar), 공격하든(AttackChar) 해야 한다.
2️⃣ 공격 애니메이션이 끝나갈 때 애니메이션을 반복 할지, 플레이어를 쫓아갈지 결정을 하기 전에, IsDeathPlayerCharacter
값이 True라면 Idle_Ready
상태로 변경
플레이어가 죽으면 쓰러져 있는 애니메이션 장면만 반복 재생
플레이어가 죽는 애니메이션 재생이 끝나면 상태 머신에 의해서 재생되는 Idle 애니메이션이 재생되지 않고 그대로 계속 쓰러져 있는 장면만 반복해서 재생하도록 하자. 플레이어가 계속 쓰러져있도록 하기 위해서! 몬스터도 이 방식을 거쳤었다. 쓰러져 있는 장면을 섹션으로 따서 이 섹션을 끝에 루프 재생 시키기. 링크 참고
🚩 “sword_and_shield_death_Monatage” 애님 몽타주
애니메이션 완전 끝에 Loop 섹션을 추가하고 Default 섹션 다음에 Loop 섹션이 반복 재생 되도록 하였다.
플레이어가 죽으면 플레이어 조작 불가능하게 하기
🚩 “MoveCharBP” 블루프린트 이벤트 그래프
플레이어(“MoveCharBP”)가 죽으면 플레이어에 대한 Input을 비활성화 한다. 띠라서 플레이어가 죽으면 키보드 입력을 받지 못하는 상태가 된다. Disable Input 노드 추가.
🔔 몬스터의 사망 처리
죽으면 죽는 상태로 설정
🚩 “MonsterState” Enumeration
몬스터의 죽은 상태를 하나 더 추가해주었다. Death
죽은 상태!
🚩 “DefaultMonsterBP” 블루프린트 이벤트 그래프
Any Damage 이벤트를 통해 데미지를 받게 되면서 몬스터의 HP 가 0 아래로 떨어져 죽으면, 몬스터의 상태(CurState
)를 Death
로 설정한다.
Death
상태가 되면 위와 같이 아무것도 안한다. 스위치에서 Idle_Ready
, Death
상태는 아무런 핀과 연결된게 없기 때문에 아무것도 안하게 된다.
죽으면 몬스터 Collsion 충돌체 비활성화
🚩 “DefaultMonsterBP” 블루프린트 이벤트 그래프
Any Damage 이벤트를 통해 데미지를 받게 되면서 몬스터의 HP 가 0 아래로 떨어져 죽으면, 몬스터의 상태(CurState
)를 Death
로 설정한 후 칼의 Collision, 몬스터 메시 전체의 Collision을 비활성화 해주어야 한다. 플레이어의 칼에 맞아 충돌 처리가 이루어지면 이미 죽었는데도 데미지 또 입고 또 다시 죽는 처리가 실행될 수 있으므로 충돌을 받을 수 없는 No Collision 상태로 설정한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기