The Fourth Descendant
3인칭 시점 루터 슈터 게임
3인칭 시점 루터 슈터 게임
넥슨의 The First Descendant를 레퍼런스로 제작한 3인칭 루터 슈터 프로젝트입니다.
AI 시스템을 전반적으로 담당했고, 근거리, 원거리, 보스 AI를 각각 구현했습니다.
[부위 파괴], [그로기], [광폭화] 시스템을 구현했고, 호밍 미사일을 비롯한 5가지의 공격 패턴을 설계했습니다.
개발 환경
C++, Unreal Engine
개발 인원
개발 4
Steam
-----------
1. 보스 AI 구현
(1) 부위파괴 시스템
보스의 급소 부위마다 Collision을 설치
공격하는 액터 쪽에서 ApplyPointDamage를 호출
TakeDamage에서 피해를 받은 부위의 이름을 통해 부위 판별
급소 부위 피격 시 추가 데미지를 받고, 일정 횟수 이상 피격 시 폭파하여 큰 데미지를 받도록 구현
(2) 그로기 시스템
쉴드 및 체력이 일정 비율 아래로 떨어질 시 모든 동작을 중지하고 그로기 상태로 전이
그로기 상태일 때에는 일정 시간동안 그 어떠한 행동도 하지 않음
(3) 그로기 시스템
체력이 일정 비율 아래로 떨어질 시 모든 동작을 중지하고 광폭화 상태로 전이
광폭화 상태 진입 시 무릎에 설치된 Collision이 활성화 되는 방식
광폭화 상태일 때에는 이동과 일반 공격을 하지 않고, 짧은 간격으로 특수 공격만 반복함
무릎의 급소 부위가 모두 파괴된 경우 다시 일반 상태로 전이하도록 구현
(4) 호밍 미사일 공격
보스의 등에 추가한 Socket에서 Homing Projectile을 Spawn 함
Spawn 된지 약 0.1초 후부터 플레이어 추적 로직 활성화
0.1초 정도의 지연시간을 둠으로써 미사일이 발사되었다는 느낌을 연출
추적이 시작된 순간의 플레이어 위치를 기억하여 해당 위치로 이동
플레이어 자체를 추격하는 경우 회피가 어려워지는 이유로 순간 위치 포착으로 구현
Homing Projectile이 충돌체와 Overlap 되는 순간, 주변에 플레이어가 존재한다면 데미지를 가함
(5) 슬러그 샷 공격
보스의 손에 달린 총구가 플레이어를 향해 회전한 후 공격 타이머 활성화
공격 시간이 경과하면 Bomb Projectile을 Spawn 함
Bomb Projectile이 충돌체와 Overlap 되는 순간, 주변에 플레이어가 존재한다면 데미지를 가함
(6) 몬스터 소환 패턴
특수 공격1 간격마다 Summon Minion 애니메이션을 재생
애니메이션의 특정 프레임에 몬스터를 소환하는 Notify 호출하도록 구현
맵에 설치된 Volume 내의 랜덤한 지점을 추출하여 해당 지점에 Spawn
(7) 랜덤 영역 폭파 패턴
특수 공격2 간격마다 Flame Explosion 애니메이션을 재생
애니메이션의 특정 프레임에 하늘로 16개의 미사일을 발사하는 Notify를 호출
16개의 미사일은 0.075초 간격으로 발사되며, 발사가 될 때마다 랜덤한 영역에 Decal을 Spawn 하고 폭파 타이머를 활성화 함
폭파 시간이 경과한 경우 해당 영역에 Explosion Niagara System을 출력하고, Overlap을 통해 주변에 플레이어가 있다면 데미지를 가함
2. 근거리 적 AI 구현
MoveTo 함수를 사용해 목표 지점 혹은 타겟을 향해 이동하도록 구현
Acceptance Radius를 낮게 설정하였고, MoveTo가 Success를 반환하면 공격 상태로 전이되도록 구현
공격 애니메이션의 특정 프레임에 Notify를 호출하여 공격을 인식하는 Collision을 활성화하는 방법으로 공격 기능 구현
근접 몬스터의 칼날 끝에 추가한 Socket에 Trail Niagara System 출력하여 시각적인 연출 구현
Generated Nav Links Proxy를 활용하여 높은 장애물에도 접근할 수 있도록 구현
3. 원거리 적 AI 구현
MoveTo 함수를 사용해 목표 지점 혹은 타겟을 향해 이동하도록 구현
Acceptance Radius 수치를 높게 설정하여 플레이어와 일정거리를 유지할 수 있도록 함
공격 애니메이션의 특정 프레임에 Notify를 호출하여 Projectile을 Spawn
Spawn 하기 전에 플레이어와 원거리 몬스터 사이에 Line Tracing을 하여 장애물이 존재한다면 공격하지 않음
“탄환 수” 기능을 구현하여 탄환 수만큼 공격했다면 장전 상태로 전이되도록 구현
Projectile에 Trail Niagara System을 추가하여 총알이 발사될 때의 시각적인 연출 구현
문제점
문제 인식
프로젝트 초기에 Behavior Tree와 Animation Blueprint(ABP)를 처음 활용함
그 결과, 전체 구조가 복잡하고 비효율적으로 설계됨
Behavior Tree 관련 문제
Blackboard와 BTTask의 역할을 명확히 분리하지 못함
로직이 특정 분기나 조건에 편향된 트리 구조로 구성됨
유지보수 및 확장 시 가독성과 관리성이 저하됨
Animation Blueprint 관련 문제
Animation Montage와 AnimInstance를 충분히 활용하지 못함
상태 전환 로직이 노드 단위로 과도하게 분리되어 복잡한 구조를 형성함
애니메이션 전환 및 관리가 비효율적으로 이루어짐
보스 Behavior Tree
보스 Animation Blueprint
회고 및 개선 방향
프로젝트 특성 및 한계
출시 목적이 아닌 프로토타입 형태로 진행된 단기 개발 프로젝트였음
개발 기간이 짧아 Behavior Tree와 Animation Blueprint 구조 개선에 충분한 시간 확보가 어려웠음
회고 및 배운 점
프로젝트 내에서는 구조적 개선을 진행하지 못했음
하지만 BT와 ABP의 올바른 활용 방식과 설계 한계점을 명확히 이해하게 됨
해당 경험을 바탕으로 차기 프로젝트에서 보다 체계적이고 효율적인 AI 및 애니메이션 시스템을 설계할 수 있었음
문제점
문제 상황
슬러그샷 공격 시 보스의 양쪽 총구가 플레이어를 향해 회전하도록 구현하고자 함
일반적인 액터 회전과 달리, Bone을 직접 회전해야 해서 구현이 까다로웠음
원인 분석
좌우 총구 애니메이션과 이동 애니메이션이 각각 따로 존재
서로 다른 3개의 애니메이션을 동시에 보간해야 하는 상황이었음
애니메이션 블렌딩 경험 부족으로 문제 해결에 어려움을 겪음
해결 방법
Layered Blend per Bone 기능을 활용하여 문제 해결
먼저 2개의 애니메이션을 보간한 뒤, 그 결과에 추가 애니메이션을 한 번 더 블렌딩
최종적으로 하나의 자연스러운 애니메이션으로 출력되도록 구성
Layered blend per bone 노드 활용
부트캠프 언리얼 트랙 우수 프로젝트 선정