IronBird 개발일지 #5
보스 페이즈 + 적 3종류 + 충돌 시스템 구현
EBossPhase · USphereComponent · FBX 콜리전 · 수동 물리 쿼리
🎯 목표
3페이즈 패턴 전환 보스와 3종류 적을 구현한다. 플레이어 체력 시스템과 HUD도 추가한다. FBX 메시 교체 과정에서 예상치 못한 콜리전 문제가 발생해 충돌 시스템을 전면 재설계했다.
AI로 클래스 구조 생성 → FBX 콜리전 문제 발견 → 직접 원인 분석 → USphereComponent로 재설계
🔧 구현 내용






1. 보스 페이즈 상태머신
Behavior Tree 없이 HP 비율 기반 단순 상태머신으로 구현했다. 모바일에서 BT는 오버엔지니어링이다.
Phase1 (HP >60%): X 고정, Y 왕복 / 1.2초마다 직선탄 5발
Phase2 (HP >30%): X 사인이동, Y 왕복 / 0.9초마다 부채꼴 5발
Phase3 (HP ≤30%): 속도 1.5배 / 0.6초마다 전체 패턴
// HomeX 기반 사인 이동 (스폰 위치 중심으로 진동)
X = HomeX + FMath::Sin(Time) * 200.0f;
모바일 관점: Behavior Tree는 틱마다 태스크를 평가해 모바일에서 부담이 크다. 보스처럼 패턴이 명확한 경우 HP 비율 기반 상태머신이 훨씬 가볍고 예측 가능하다.
🔥 트러블슈팅
문제 1. FBX 메시 교체 후 모든 충돌이 동작하지 않음 (핵심)
원인: UE5에서 FBX 임포트 시 콜리전 Shape가 자동 생성되지 않는다. 기존 Cube 메시는 내장 BoxCollision이 있어서 동작했지만, StarSparrow FBX는 물리 바디가 없어 모든 충돌이 불가능했다.
해결: MeshComponent의 콜리전을 비활성화하고 USphereComponent를 별도로 추가해 hitbox를 명시적으로 구성했다.
MeshComponent->SetCollisionEnabled(ECollisionEnabled::NoCollision);
// 명시적 hitbox 추가
HitSphere = CreateDefaultSubobject<USphereComponent>(TEXT("HitSphere"));
HitSphere->SetupAttachment(RootComponent);
HitSphere->SetSphereRadius(80.0f); // Enemy: 80 / Boss: 250 / Player: 70
HitSphere->SetCollisionObjectType(ECC_Pawn);
HitSphere->SetGenerateOverlapEvents(true);
문제 2. QueryOnly 컴포넌트 간 Overlap 이벤트 불안정
원인: UE5 Chaos 물리에서 QueryOnly 설정된 컴포넌트끼리는 OnComponentBeginOverlap 이벤트가 간헐적으로 발생하지 않는 경우가 있다.
해결: Bullet Tick에서 OverlapMultiByObjectType으로 직접 물리 쿼리를 실행했다.
TArray<FOverlapResult> Overlaps;
FCollisionObjectQueryParams ObjParams(ECC_Pawn);
GetWorld()->OverlapMultiByObjectType(
Overlaps, GetActorLocation(), FQuat::Identity,
ObjParams, FCollisionShape::MakeSphere(50.0f), QueryParams
);
모바일 관점: Bullet Tick마다 물리 쿼리를 실행하므로 총알 수가 많을수록 비용이 증가한다. 현재 Object Pool로 최대 30개로 제한돼 있어 허용 범위지만, 탄막 슈팅이라면 LineTrace 기반이 더 효율적이다.
문제 3. FBX 메시 방향이 탑뷰 기준과 불일치
원인: FBX 모델의 전면 방향이 UE5 좌표계 기준과 달라 탑뷰에서 옆을 향하게 됐다.
해결: 에디터에서 직접 확인하며 SetRelativeRotation 값을 맞췄다.
적/보스: FRotator(0, 90, 90)
💡 배운 것
• FBX 임포트 메시는 콜리전이 없다. 항상 USphereComponent 또는 UCapsuleComponent로 별도 hitbox를 구성해야 한다.
• MeshComponent는 비주얼 전용, Collision 전용 컴포넌트를 분리하는 것이 명확한 설계다.
• UE5 Chaos에서 QueryOnly 컴포넌트 간 Overlap 이벤트는 불안정할 수 있다. 중요한 충돌은 직접 물리 쿼리로 처리하는 것이 안정적이다.
• 보스 AI는 BT 없이 HP 비율 기반 상태머신으로 충분하다. 모바일에서 BT는 불필요한 오버헤드다.
• FBX 좌표계는 엔진마다 다르다. 임포트 후 항상 에디터에서 방향을 직접 확인해야 한다.
📌 다음 작업
[IronBird #6] 메인화면 + 게임오버 + 점수 시스템 + 회복아이템 + BGM + 이펙트 + 효과음
적 처치 시 100점, 게임오버/클리어 시 점수 표시, 메인화면 레벨 분리.
'개인프로젝트 > IronBird' 카테고리의 다른 글
| [IronBird #7] BGM + 이펙트 + 하트 아이템 + 틸팅 + UMG 메인화면 (0) | 2026.06.02 |
|---|---|
| [IronBird #6] 메인화면 + 점수 시스템 + 게임오버/클리어 (0) | 2026.05.28 |
| [IronBird #4] 적 스폰 시스템 구현 (0) | 2026.05.28 |
| [IronBird #3] Object Pool 구현 - Spawn/Destroy 비용 제거 (0) | 2026.05.28 |
| [IronBird #2] 배경 스크롤 + 총알 발사 구현 (0) | 2026.05.27 |