Skip to main content

Command Palette

Search for a command to run...

Unity Project-2026/02/19-HITWAVES

Updated
3 min read

2026/02/15 - 기능개발 일지

기능개발


장착형 아이템 시스템

[목표]

  • 아이템 4분류 중 장착형 구현 — 슬롯 기반 장비 장착/해제/드롭

  • 기존 ItemData SO를 흡수/장착 통합 SO(ItemMaker)로 리팩토링

  • Strength 스탯 기반 무게 제한 시스템

[구현 요약]

  • ItemData SO → ItemMaker SO로 리팩토링 (흡수형/장착형 필드 통합, CreateAssetMenu 지원)

  • EquipmentSlotType enum 생성 (Head/Body/Arms/Legs/Back/Accessory/Weapon 7부위)

  • EquipmentHandler 컴포넌트 — 동적 슬롯 관리(HashSet), 장착/해제/드롭, 무게 시스템

  • WorldItem에 Equipment 픽업 분기 추가 (switch 구조), Initialize() 메서드 추가 (런타임 드롭용)

  • 무게 시스템: Strength × weightPerStrength = 최대 무게, 초과 시 장착 거부

  • 같은 슬롯 장비 교체: 기존 장비 자동 Unequip → Drop → 신규 장비 Equip

  • 뮤턴트 대응: AddSlot/RemoveSlot으로 런타임 슬롯 변경 지원

  • ItemMakerEditor 커스텀 인스펙터 — ItemType에 따라 조건부 필드 표시

[결과]

  • 인스펙터에서 장착 부위, 무게, 스탯 변경을 설정 가능

  • 장비 교체 시 기존 장비가 월드에 드롭되어 재픽업 가능

  • 무게 초과 장비는 장착 거부, 아이템이 월드에 유지

디버그 UI 시스템

[목표]

  • 개발 중 플레이어의 스탯, 장비, 패시브 정보를 실시간으로 확인할 수 있는 디버그 패널

  • 이벤트 기반으로 자동 갱신되어 수동 새로고침 불필요

[구현 요약]

  • ItemHistory 컴포넌트 생성 — 흡수 아이템 이력 추적, OnItemAbsorbed 이벤트

  • DebugStatPanel 컴포넌트 생성 — ` (Backquote) 키로 토글, TextMeshProUGUI 사용

  • 3개 섹션 표시: Stats(전체 스탯 + HP), Equipment(슬롯별 장비 + 무게), Passives(흡수 아이템 + 효과)

  • 이벤트 기반 자동 갱신: OnStatChanged, OnHealthChanged, OnEquipped/OnUnequipped, OnItemAbsorbed 구독

  • StringBuilder(1024) 재사용으로 GC 최소화

[결과]

  • ` 키 한 번으로 전체 캐릭터 상태 확인 가능

  • 아이템 획득/장착 시 패널이 열려있으면 즉시 반영

  • 패널 닫힌 상태에서는 이벤트 수신해도 Refresh 호출 안 함 (불필요한 연산 방지)

아이템 밀기 (Kick)

[목표]

  • 아이작 스타일로 픽업 실패한 아이템을 발로 밀 수 있게 하기

  • 장착 불가(무게 초과, 슬롯 없음) 장비를 물리적으로 밀어서 이동시키기

[구현 요약]

  • WorldItem에 Rigidbody2D RequireComponent 추가 (gravityScale=0, FreezeRotation, linearDamping=5)

  • 픽업 실패 시 Collider2D.isTrigger = false → 물리엔진이 자연스럽게 밀어냄

  • OnCollisionExit2D에서 isTrigger = true 복원 → 재접근 시 픽업 재시도

  • TryPickup() 메서드 분리로 픽업 로직 공용화

[결과]

  • 수동 AddForce 대신 Unity 물리엔진에 위임하여 자연스러운 밀기 느낌

  • 플레이어 속도/질량이 그대로 반영되어 추가 튜닝 불필요

  • 밀린 아이템을 다시 밟으면 trigger 복원 후 픽업 재시도

공중/지상 분류 체계 (Elevation)

[목표]

  • 엔티티(플레이어, 적)와 아이템 모두 공중/지상 상태를 가질 수 있는 기반 구조

  • 추후 점프/비행, 공격 필터링, 시각 효과(Y오프셋, 그림자)의 토대

[구현 요약]

  • ElevationState enum 생성 (Grounded, Airborne)

  • ElevationHandler 컴포넌트 — 상태 관리 + 물리 레이어 자동 전환

  • 인스펙터에서 groundLayer, airborneLayer 설정 → SetElevation() 호출 시 자동 전환

  • OnElevationChanged 이벤트로 상태 변경 알림

  • RequireComponent 없는 범용 설계 — 엔티티, 아이템 등 어디든 부착 가능

[결과]

  • 분류 체계 + 레이어 전환 인프라 완성

  • 점프/비행 로직, 공격 상호작용 필터링, 시각 효과는 추후 확장 예정

  • Unity의 Physics2D Layer Collision Matrix와 연계하여 공중/지상 충돌 분리 가능

More from this blog

O

ON VOID STUDIO

6 posts

💻 Indie Dev Studio — Emptiness is Possibility. ON VOID STUDIO builds games, apps, and digital experiences from scratch. One developer, turning nothing into something.