메카닉 딥다이브 프로젝트 일지: 2일차

March 25, 2026 (1mo ago)

0 views

카메라 락온 컴포넌트 분리

BPC_Combat 컴포넌트에 카메라 락온 기능도 섞여있어 God Object가 될 싹수가 보임 즉시 BPC_TargetLock으로 분리

분리하려고 보니 락온할 Target이 어떤 상태인지를 알 필요가 있어짐 → Enemy의 설계가 필요해짐

EnemyBase 설계

소울라이크 구조를 답습할 것이기에 일단 적 계층도 비슷하게 가져가기로 함

  • 휴머노이드형
  • 동물형
  • 기타(용, 상상속의 동물 등) 외형 분류로 나누려다가 더 중요한 상위 계층이 있었음
  • 보스(Bosses)
  • 쫄몹, 일반몹(Minions) 그래서 아래와 같이 가기로 결정
/Enemies BP_EnemyBase EEnemyState /Bosses /Minions

견본 프로젝트 옮기기할 때 주의사항

  1. Project Settings → Maps & Modes 에서 Default Game Mode를 내가 만든 GameMode BP로 바꿔줘야함
  2. World Settings → GameMode Override를 내가 만든 GameMode BP로 바꿔줘야 함
  3. GameMode BP를 열어서 내가 만든 Character, Controller를 연결해줘야 함

구조 설계

  • 플레이어 뿐만 아니라 보스도 공격/방어가 가능해야 함
  • 공격 주체의 상태, 공격 성질, 공격 판정,
  • 타겟 락온 기능은 플레이어 귀속 기능
  • 오브젝트의 스탯 관리는 캐릭터와 몬스터보다 상위에 있어야 함
Characters/ ├─ Player/    ├─ BP_PlayerCharacter    ├─ Components/       ├─ BPC_TargetLock       └─ BPC_PlayerInputBridge    ├─ Camera/       ├─ BP_PlayerCameraManager       └─ BP_CameraShake...    └─ Animations/  └─ Enemies/     ├─ BP_EnemyBase     ├─ Bosses/     ├─ Minions/     └─ Animations/Gameplay/ └─ Combat/     ├─ Components/        ├─ BPC_CombatCore        └─ BPC_Health     ├─ Data/        └─ DA_AttackSet     ├─ Types/        ├─ E_CombatState        └─ DT_AttackData     └─ Interfaces/         ├─ BPI_Targetable         └─ BPI_DamageableUI/ └─ TargetLock/     └─ BP_TargetLockMarker

이렇게 구조를 설계하니 너무 깔끔하게 확장성이 확보됐다. GPT Free와 Plus 격차도 이런데 Pro 플랜을 사용하면 얼마나 잘해줄까?

공용 Combat 시스템 구현

1. Combat/Types: 단일 공격에 대한 구조체 생성

S_AttackData 공격 데이터 구조체:

  • 공격 이름, 무기 이름, 종류
  • 대미지, 스테미너 비용, 피격 타입, 회전 가능 여부
  • 콤보 공격 데이터(다음 공격 여부, 다음 공격 인덱스)
  • 애니메이션 관련(몽타주, 루트 모션 여부) E_CombatState 전투 상태 Enum:
  • Idle, Attacking, Dodging, HitStun, Dead E_HitReactionType 피격 타입 Enum:
  • None, Light, Heavy, Knockback

2. Combat/Data: 구조체 기반 공격 콤보

DA_AttackSetBase:

  • Attacks 배열, WeaponName, WeaponType, bIsTwoHanded 가지고 있는 클래스 DA_Sword_Longsword:
  • 실제 롱소드 공격 시퀀스 데이터 에셋.
  • S_AttackData 구조의 공격들을 배열로 만들고 관리할 수 있음
  • 애니메이션 몽타주만 있으면 손쉽게 확장 가능

3. Combat/Components: 전투 시스템 규칙 컴포넌트

BPC_CombatCore:

  • 공격 시작, 종료, 피격 상태 진입, 닷지 시도 등 실제 공격 수행에 대한 공통 로직 제공
  • 주로 유효성 검사(공격 DA 존재 여부, 다음 공격 존재 여부, 액터 상태 체크) BPC_Health:
  • 대미지 반영, 체력 회복, 사망 처리 로직 제공

4. Combat/Interfaces: 전투 대상 인터페이스

BPI_Damageable:

  • 피격 가능한 오브젝트를 위한 틀
  • ReceiveHit, IsDead 등 꼭 필요한 공통 로직 명세서 제공 BPI_Targetable:
  • 타게팅 가능 대상에 대한 인터페이스
  • CanBeTargeted, GetTargetLocation 제공

사용방법은 Player나 Enemy에 가서 CombatCore 컴포넌트를 추가해주기만 하면 된다

완전 개꿀딱