리모트 폭탄 시스템
상태: C++ 입력·생성·기폭 흐름 기준. 개별 Blueprint의 메시·머티리얼 설정과 PIE 검증은 에디터에서 확인해야 한다.
목적
둥근 리모트 폭탄과 정육면체 리모트 폭탄을 각각 하나씩 생성해 들거나 설치하고, 선택한 형태를 원하는 시점에 원격 기폭해 물리 힘·피해·파괴 반응을 만든다. 형태별 생성과 재사용 대기시간을 독립적으로 관리한다.
구현 범위
- 둥근 리모트 폭탄과 정육면체 리모트 폭탄 각각 하나 생성
- 형태별 독립 생성·기폭·재사용 대기시간과 폭발 범위 안의 다른 폭탄 연쇄 기폭
- 폭발 반경 안 물리 오브젝트에 일정한 크기의 힘 적용
- 폭발 범위 안 물체의 피해 판정과 대상별 피해·파괴 반응 처리
- 플레이어 폭발 피해와 넉백, 차폐물 판정
- 취소, 재시작, 클리어 시 리모트 폭탄 정리
현재 능력 인스턴스는 구형·큐브형을 각각 최대 하나씩 추적한다. 지형 파괴와 적 AI의 고급 반응은 이 시스템에서 처리하지 않는다.
권장 구조
URemoteBombAbility (UPlayerAbilityComponent가 생성·선택)
├─ 선택한 리모트 폭탄 형태
├─ 형태별 현재 리모트 폭탄 참조
├─ 형태별 재사용 대기시간
└─ 생성·보유·내려놓기·던지기·회수·기폭·정리 요청
ARemoteBomb
├─ Blueprint에서 제공하는 물리 루트와 외형 메시
├─ 보유·설치 상태와 충돌 전환
└─ 폭발 반경 Niagara 표시
공통 생성·기폭·폭발 판정은 URemoteBombAbility에서 처리한다. 형태별 물리 특성은 두 Blueprint의 루트 컴포넌트 설정에 달려 있으며, C++만으로 굴림/안정성 값을 보장하지 않는다. 피해는 일반 ApplyDamage 경로로 전달된다.
상태 흐름
형태별 사용 가능 → 머리 위에 보유 → 내려놓기·던지기로 설치 → 기폭 → 재사용 대기 → 사용 가능
- 각 형태는 서로 독립된 상태와 타이머를 가진다.
IA_AbilityUse는 선택한 형태가 없으면 생성하고, 설치돼 있으면 그 형태만 즉시 기폭한다. 다른 형태는 직접 기폭하지 않는다.- 선택한 형태의 폭탄을 보유 중일 때
IA_AbilityUse재입력은 무시한다. - 설치된 폭탄은
IA_Interact로 다시 주울 수 있다. - 폭발 범위 안에 다른 형태의 설치된 폭탄이 있으면 차폐 여부와 관계없이 연쇄 기폭하고, 각 형태의 재사용 대기시간을 시작한다. 능력 변경 시 보유 폭탄은 떨어뜨려 설치 상태로 만든다.
- 생성 실패 시에는 상태를 바꾸지 않는다.
- 보유 중
IA_Cancel은 폭탄을 폭발 없이 제거해 주머니에 넣은 것으로 처리한다. 해당 형태는 재사용 대기시간을 시작하지 않고 즉시 사용 가능 상태가 된다. - 플레이어의 낙하·무기 들기·피격·능력 변경은 보유한 폭탄을 머리 위에서 놓아 떨어뜨린다. 내려놓기·던지기·이 상황의 낙하는 설치 상태로 전환하며 재사용 대기시간을 시작하지 않는다.
생성 규칙
- 선택한 형태의 폭탄이 없고 해당 형태의 재사용 대기시간이 끝났는지 확인한다.
- 머리 위 위치를
RemoteBombRadius크기의 구체로Visibility차단 겹침 검사한다. - 유효하면 플레이어에 설정된 형태별 Blueprint 클래스를 생성하고 보유 상태로 전환한다. 클래스 누락, 겹침 또는 생성 실패 시 상태를 바꾸지 않는다.
IA_Interact는 보유한 폭탄을 머리 위에서 놓아 중력으로 떨어뜨리고,IA_BombThrow는 바라보는 방향으로 던진다. 설치된 폭탄은IA_Interact로 다시 주울 수 있다.
보유 중에는 폭탄 루트의 물리와 충돌을 끈다. 기본 보유는 Blueprint의 지정 소켓에 붙이며, 양손 보유 설정에서는 양손 위치를 따라간다. 내려놓기 위치는 플레이어 앞쪽 지면을 Trace하고 겹침을 검사한다. 던지기는 애니메이션 릴리스 시점에 수행하며, 진행 경로를 Sweep해 벽에 걸리면 충돌 지점에 놓거나 안전 위치로 대체한다.
폭발 처리
- 폭발 중심에서 반경 내 후보를 찾는다.
- 후보별
VisibilityLine Trace로 가림을 검사한다. 다른 액터가 Trace를 막으면 그 후보의 피해·힘 적용을 건너뛴다. - 보이는 범위 내 물리 컴포넌트에 일정한 방사형 임펄스를 적용한다.
LiftableObject의 전용 리프트 메시에는 이 임펄스를 중복 적용하지 않는다. - 액터별 1회
ApplyDamage를 호출하고, 피해를 받을 수 있는지는 액터 설정이 결정한다. - 플레이어는 같은 가시성 조건으로 피해를 받고 별도 수직 성분을 더한 넉백을 받는다.
- 반경 안 다른 설치 폭탄은 시야 차단과 무관하게 연쇄 기폭한다.
NS_RemoteBombRangeSphere를 폭발 위치에 생성하고 반경·파란색 계열을 전달한 뒤 폭탄 액터를 제거하며 쿨다운을 시작한다. 현재 코드에서 별도NS_RemoteBombExplosion호출은 확인되지 않는다.
플레이어도 같은 차폐물 규칙을 적용한다. 폭발 VFX의 실제 화면 표현과 게임플레이 반경 일치는 PIE에서 확인해야 한다. 폭탄은 기폭 입력 전까지 시간 경과만으로 폭발하지 않는다.
폭발 피해에 별도의 EAbilityReactionType을 추가하지 않는다. 파괴되지 않는 물체는 피해 수신을 끄거나, 피격 반응을 유지해야 한다면 소진되지 않는 체력·내구도를 사용한다. 일반 공격과 폭발은 물체의 같은 피해 처리 경로를 사용한다.
입력 연결
| 동작 | 입력 | 처리 |
|---|---|---|
| 리모트 폭탄 형태 선택 | IA_AbilityWheel | 둥근형 또는 정육면체형 선택 |
| 생성 또는 기폭 | IA_AbilityUse / Q | 선택한 형태가 없으면 머리 위에 생성, 보유 중이면 무시, 설치돼 있으면 그 형태만 즉시 기폭 |
| 내려놓기 또는 다시 줍기 | IA_Interact / E | 보유 중에는 머리 위에서 놓아 떨어뜨리고, 설치된 폭탄은 다시 줍기 |
| 던지기 또는 권총 조준 | IA_BombThrow / R | 폭탄 보유 중에는 RemoteBombThrow 전달, 그 외에는 권총 조준 시작. 키를 놓거나 취소하면 권총 조준 종료 |
| 취소 | IA_Cancel / 오른쪽 버튼 | URemoteBombAbility에 Cancel 입력을 전달하면 보유 폭탄을 제거하고 쿨다운 없이 돌려놓는다. 현재 Controller의 IA_Cancel 바인딩은 달리기 전용이므로 플레이 입력으로는 이 처리에 연결되지 않음 |
| 레벨 재시작 | Backspace 메뉴의 재시작 항목 | 모든 리모트 폭탄 제거와 상태 초기화 |
보유 중 능력 변경·낙하·무기 들기·피격이 발생하면 폭탄을 머리 위에서 놓아 떨어뜨린다. 직접 기폭과 연쇄 기폭을 제외하면 자동 폭발하지 않으며, 재시작·클리어에서는 폭발 효과 없이 제거한다.
조정값
| 값 | 의미 |
|---|---|
| 보유·설치 검사 거리와 크기 | 머리 위 생성, 내려놓기, 다시 줍기의 유효 범위와 겹침 검사 |
| 폭발 반경 | 힘·피해·파괴 판정 범위 |
| 폭발 힘 | 범위 안 물리 오브젝트에 적용할 기본 충격량 |
| 피해량 | 범위 안 플레이어와 피해 대상에 전달할 기본 피해 |
| 형태별 재사용 대기시간 | 기폭 뒤 다음 생성까지의 시간. 기본값은 각 형태 6초 |
| 둥근형 마찰·각감쇠 | 굴림 성향 조절 |
| 정육면체형 질량·감쇠 | 정지 안정성 조절 |
안전성과 피드백
- 폭탄은 능력 시각 모드가 아니다. 선택 시 월드 스캔, 후보 색상 또는 능력 반응 알림을 켜지 않는다.
- 기폭 입력과 동시에 반경 표시 VFX를 재생한다. 기폭 전 경고나 자동 폭발 타이머는 두지 않는다.
- 폭발력은 플레이테스트로 조정해 플레이어가 반복적으로 즉사하지 않게 한다.
- 재시작, 사망, 클리어 시 생성된 리모트 폭탄을 폭발 없이 제거한다.
현재 확인 범위와 남은 검증
C++에서 형태별 추적, 생성 검사, 보유·내려놓기·던지기·회수, 기폭, 시야 판정, 피해·넉백, 연쇄 기폭, 재시작/EndPlay 정리를 확인했다. 다음 조건은 PIE에서 확인해야 한다.
기존 PIE 스모크 로그에는 구형·큐브형 들고 이동/던지기, 조기 던지기 입력 대기, 큐브형 내려놓기 검사 통과가 기록돼 있다. 이 스모크는 폭발 피해·차폐·연쇄 기폭·쿨다운·반경 VFX 크기를 검증하지 않았다. 능력 휠 아이콘 로드 경고도 확인됐다. C++은 /Game/Resources/UI/Common/ 경로를 찾지만 실제 리모트 폭탄 아이콘 MI는 /Game/Resources/UI/Ability/에 있어 현재 선택 아이콘이 비어 있을 수 있다.
- 두 형태를 각각 하나씩 생성해 들거나 설치하고, 선택한 설치 폭탄만 직접 기폭할 수 있다.
- 둥근형은 굴러가고 정육면체형은 상대적으로 안정적이다.
- 폭발이 물리 오브젝트를 밀고, 차폐물은 플레이어 피해를 막는다.
- 다른 형태의 폭탄이 폭발 범위 안에 있으면 즉시 연쇄 기폭하며, 기폭된 각 형태의 재사용 대기시간이 독립적으로 적용된다.
- 재시작 뒤 리모트 폭탄, 효과, 대기시간 상태가 남지 않는다.
- 반경 VFX 크기와 피해 반경이 화면에서 일치한다.