TPS 개발 : 무기 시스템 (3) — 스페셜 탄 · 업그레이드 · UI 테스트
웨폰 컴포넌트에 스페셜 탄 리스트·총기 업그레이드 Definition·탄 선택·장착을 붙이고 UI로 테스트
TPS 개발 - 무기 시스템 (3)
Weapon Definition을 하나로 통일했으니, 오늘은 그 위에 실제로 굴러가는 무기 컴포넌트를 완성했다. 스페셜 탄 관리부터 총기 업그레이드, 탄 선택, 장착, 그리고 UI 테스트까지 한 번에 붙였다.
스페셜 탄 리스트
크래프팅으로 만든 특수탄을, 무기에서 실제로 쓸 수 있게 웨폰 컴포넌트에 스페셜 탄 리스트를 만들었다.
핵심은 어떤 탄을 이 리스트에 넣고 뺄지를 런타임에 관리하는 것이다.
1
2
3
4
5
6
// WeaponComponent (의사코드)
UPROPERTY()
TArray<UAmmoInstance*> SpecialAmmoList; // 장전 가능한 스페셜 탄 목록
void AddSpecialAmmo(UAmmoInstance* Ammo); // 리스트에 추가
void RemoveSpecialAmmo(UAmmoInstance* Ammo); // 리스트에서 제거
크래프팅으로 얻은 특수탄을 리스트에 넣으면 그 무기로 쓸 수 있게 되고, 빼면 사라진다. 인벤토리와 무기 사이를 잇는 다리 역할이다.
총기 업그레이드 Definition
무기를 강화하는 업그레이드 Definition을 따로 만들었다. Definition 시스템의 확장선이다.
1
2
3
4
UWeaponUpgradeDefinition
├─ 대상 무기 (어떤 무기에 적용?)
├─ 스탯 변화량 (데미지 / 연사 / 탄퍼짐 ...)
└─ 적용 조건 / 비용
업그레이드를 적용하면 Weapon Definition의 CombatAS 값이 갱신되는 방식이라, 통일해둔 Definition 구조 덕에 붙이기가 수월했다.
어떤 탄을 쓸지 — 탄 선택
무기에 스페셜 탄 리스트가 생겼으니, 지금 어떤 탄을 장전해서 쏠지 고르는 로직도 필요했다.
1
2
3
4
5
// 현재 선택된 탄
UPROPERTY()
UAmmoInstance* SelectedAmmo;
void SelectAmmo(int32 Index); // 리스트에서 사용할 탄 선택
발사 시에는 SelectedAmmo가 가진 Ability/Effect가 적용된다. 화염탄을 고르면 화염 효과가, 관통탄을 고르면 관통이 나가는 식이다.
무기 장착
2편에서 잡아둔 장착 API를 실제 컴포넌트에 연결해, 무기 장착까지 전부 동작하게 했다.
1
2
3
4
5
가방(보유 무기 리스트)
└─ EquipWeapon(Index)
└─ Weapon Definition에서 메쉬·몽타주 로드
└─ 소켓에 스폰 & CombatAS 반영
└─ 스페셜 탄 리스트 연결
장착과 동시에 그 무기의 스페셜 탄 리스트가 물려서, 장착 → 탄 선택 → 발사가 자연스럽게 이어진다.
UI 만들고 테스트
마지막으로 이 모든 걸 조작할 UI를 만들어서 직접 테스트했다.
- 보유 무기 목록에서 무기 선택 → 장착
- 스페셜 탄 리스트에 탄 추가/제거
- 사용할 탄 선택
- 업그레이드 적용
UI에서 버튼을 누르는 대로 무기 컴포넌트가 반응하는 걸 확인했다. Definition을 하나로 통일해둔 게 여기서 제대로 값을 했다 — UI는 Definition만 바라보면 되니 연결이 깔끔했다.
오늘 정리
- 웨폰 컴포넌트에 스페셜 탄 리스트 + 추가/제거 관리
- 총기 업그레이드 Definition으로 CombatAS 강화
- 탄 선택 로직 (선택한 탄의 Ability/Effect가 발사에 반영)
- 장착 API 실연결 → 장착·탄 선택·발사가 하나로 이어짐
- UI 제작 후 실제 테스트로 전체 흐름 검증
인벤토리에서 시작해 상점, 무기까지 이어진 시스템이 드디어 손에 잡히는 형태로 굴러가기 시작했다.
