TIL

[UE5] 1인 레이드 프로토타입 제작기 (1) - 전투 시스템 기초 설계

think95592 2026. 4. 21. 19:34

목표

  • 언리얼 엔진의 컴포넌트 시스템과 블루프린트 인터페이스를 활용한 '1인 레이드' 전투 로직 구현

1. 데미지 시스템 인프라 구축 (Decoupling)

기존의 유니티 개발 방식에서는 클래스 간의 참조가 잦았으나, 언리얼에서는 **블루프린트 인터페이스(Blueprint Interface)**를 사용하여 객체 간의 결합도를 낮추는 방식을 채택했다.

  • BPI_Damage 인터페이스 생성: TakeDamage 이벤트를 인터페이스로 정의하여 피격자가 무엇인지(플레이어, 보스, 환경 오브젝트 등) 상관없이 범용적으로 데미지를 전달할 수 있게 설계함.
  • HealthComponent (액터 컴포넌트): 체력 데이터를 담는 컴포넌트를 별도로 생성하여 캐릭터 블루프린트에 부착.
    • 핵심: Cast To로 클래스를 직접 찾지 않고, 컴포넌트 참조를 통해 로직을 분리하여 유지보수성을 극대화함.

 

2. 보스 전투 로직 구현 및 트러블슈팅

레이드 보스의 핵심인 투사체 공격 구현 과정에서 겪은 문제와 해결책.

  • 보스가 자기가 쏜 총에 맞는 현상:
    • 원인: 발사체와 보스의 충돌체(Collision)가 같은 공간에서 생성되어 즉시 충돌 발생.
    • 해결: 머리 위에서 발사.
  • 투사체 추적 기능 (Homing Projectile):
    • Projectile Movement 컴포넌트의 Homing 기능을 활성화하고, Set Homing Target Component에 플레이어의 RootComponent를 연결하여 플레이어를 쫓아오는 미사일을 구현함.

 

3. 1인칭 FPS 로직 -> 탑다운뷰 전환 (중요!)

기존 템플릿의 FPS 발사 로직을 탑다운 슈팅으로 변환하는 과정에서 가장 큰 두통을 느꼈다.

  • 기존 FPS 방식: 카메라가 바라보는 방향(GetCameraRotation)으로 발사.
  • 탑다운 전환 방식: 마우스 커서의 월드 좌표(Get Hit Result Under Cursor by Channel)를 기준으로 발사 방향을 결정.
    • 수정 로직:
      1. GetPlayerController를 통해 마우스 커서 위치를 추적.
      2. Find Look at Rotation 노드를 사용하여 [총구 위치]에서 [마우스 커서가 가리키는 지점(Impact Point)]을 바라보는 회전값을 계산.
      3. 이 회전값을 SpawnActor의 SpawnTransform에 적용.


오늘의 깨달음

  1. 인터페이스는 강력하다: Cast To 지옥에서 벗어나니 코드가 훨씬 깔끔해진다.
  2. 물리는 정직하다: 발사체와 액터의 충돌 프리셋 설정, 그리고 스폰 위치(Offset) 설정은 물리 엔진을 다루는 기본 소양이다.
  3. 관점의 전환: FPS와 탑다운은 카메라의 제약 여부에 따라 발사 방향 결정 로직이 완전히 달라진다. 이제 카메라가 아니라 '입력'과 '월드 공간'의 관계로 생각하자.

다음 단계

  • 보스의 체력 50% 이하 페이즈 전환 로직 구현
  • 타격감 보강을 위한 카메라 쉐이크(Camera Shake)와 사운드 피드백 추가
  • 전투 루프를 관리하는 비헤이비어 트리(Behavior Tree) 설계