전투
전투는 개별적인 시스템이라기보다는 추상적인 시스템으로, 여러 다양한 시스템이 함께 작동하는 복잡한 상호작용이며 디자인의 복잡도에 따라 구현의 복잡도가 크게 달라집니다.
패럿 게임에서 디자인의 범위는 매우 간단합니다. 플레이어에게는 한 가지 공격 수단이 있는데 적 위로 점프하는 것입니다. 적은 타입에 따라 근접 공격과 접촉 공격, 두 가지 방식으로 플레이어를 공격합니다.
플레이어의 공격과 적 근접 공격의 경우, 기본은 거의 같습니다. 캐릭터의 스켈레탈 메시에 근접 공격 방식에 따라 하나 이상의 히트박스(hitboxes)를 배치했으며, 히트 테스트가 가능한 영역을 대략적으로 나타내기 위해 하나 이상의 허트박스(hurtboxes)도 배치했습니다.
적의 접촉 공격의 경우, 적의 캡슐 콜라이더를 사용하여 플레이어가 적과 접촉했는지 확인하고 근접 공격과 동일한 히트 액션을 수행합니다. 캐릭터가 히트될 때 발생하는 일에 대한 구현은 Parrot\Source\Parrot\Public\Character\ParrotCharacterBase.h에 있는 캐릭터 베이스 클래스에서 확인할 수 있습니다. 함수 로직은 여기와 서브클래스인 ParrotPlayerCharacter.h 및 ParrotEnemyCharacterBase.h에 포함되어 있습니다.
플레이어 캐릭터
플레이어에 대한 구성은 적을 공격할 때 작동하는 방식에서 독특한 특징이 있습니다. 플레이어가 적의 허트박스와 오버랩되면 적은 이 정보를 플레이어에게 전달하여 공격이 유효한지 묻습니다. 이 경우, 플레이어가 허트박스의 위쪽에 있는지를 확인하여 플레이어가 측면이나 아래에서 히트하지 않고 위에서 가하는 공격인지 확인합니다. 공격이 유효하면 적이 플레이어에게 점프를 수행하라는 신호를 보냅니다. 플레이어가 허트박스와 접촉할 때 점프 버튼을 계속 누르고 있었다면 더 높이 점프합니다. 허트박스와 접촉하기 전에 버튼을 놓았다면 점프가 낮아집니다.
적 캐릭터
적에 대한 구성은 몇 가지 이유로 조금 더 복잡합니다. 근접 공격이 사실적으로 보이도록 하기 위해 적의 허트박스는 무기 가장자리에 배치되어 있습니다. Blueprints > Enemy > Skeleton > BP_EnemyCharacter_Skeleton에 있는 것과 같은 적 캐릭터 블루프린트의 뷰포트에서 히트박스, 허트박스, 캡슐 콜라이더 구성을 확인할 수 있습니다.
이 예시에서는 머리에 있는 허트박스와 무기에 있는 히트박스, 캡슐 콜라이더를 볼 수 있습니다. 이러한 각 트리거는 오버랩 이벤트를 캐릭터 베이스 클래스의 부모 함수에 전달합니다.
또한, 공격 애니메이션은 무기를 휘두르는 애니메이션 부분에서만 무기 히트박스를 활성화하는 노티파이 이벤트도 전송합니다. 이런 방식 덕분에 플레이어가 적과 접촉하여 아무 때나 대미지를 입는 것이 아니라 실제로 무기에 맞고 있는 것처럼 보이고 느껴집니다. 이러한 애니메이션 노티파이는 공격 애니메이션의 특정 지점에 삽입되어 허트박스를 활성화했다가 비활성화하는 트리거 역할을 합니다. 애니메이션 노티파이는 Blueprints > Enemy/EnemyBase > BP_AnimNotify_EnemyAttackBegin 및 Blueprints > Enemy > EnemyBase > BP_AnimNotify_EnemyAttackEnd에서 확인할 수 있으며, Assets> Quaternius > PirateKit > Characters > Headless_Skeleton > Animations > Characters_Skeleton_Headless_Anim_CharacterArmature_Sword와 같이, 특정 적 캐릭터의 공격 애니메이션에 구성되어 있습니다.
적 캐릭터는 오버랩을 확인하고 이벤트를 트리거하는 캐릭터입니다. 즉, 적절한 오버랩이 탐지되면 적은 자신의 HitCharacter() 함수와 플레이어의 HitCharacter() 함수를 모두 트리거합니다.
히트박스와 허트박스의 오버랩 시 작동하는 코드는 Parrot\Source\Parrot\Public\Character\ParrotEnemyCharacterBase.h 파일의 HitBeginOverlap() 및 HurtBeginOverlap() 함수에서 확인할 수 있습니다.
보스 전투
패럿의 보스 전투의 경우, 보스가 플레이어에게 히트되었을 때 보스의 '분노' 시퀀스를 재생하는 추가 함수 기능이 있습니다. 보스 반응을 트리거하는 블루프린트 코드는 Blueprints > Enemy > BossShark > BP_EnemyCharacter_BossShark에서 확인할 수 있습니다.
'분노' 시퀀스는 간단한 타이밍 기반 시퀀스로, 보스의 걷는 속도가 빨라지고 녹색 불꽃 나이아가라 컴포넌트를 활성화하여 VFX를 연출하기 전에 그 신호가 되는 '머리 흔들기' 애니메이션을 재생합니다. 이 시퀀스 중에는 보스가 무적이 되도록 허트박스도 비활성화됩니다.