티스토리 뷰
🟩 학습 목표
- ReplicatedUsing(OnRep) 콜백과 델리게이트를 연동하여 멀티플레이 환경에서 인벤토리 UI의 불필요한 전체 갱신을 막고 데이터 변화에만 반응하는 최적화 구조 구축
- 단일 책임 원칙(SRP)에 근거하여 입력 처리(Character)와 데이터 처리(Inventory) 역할을 엄격히 분리(Decoupling)함으로써 객체지향 협업 아키텍처 수립
- 백엔드 및 네트워크 동기화가 완료된 C++ 부모 클래스(ANCItemActor)를 설계하여 기획/디자인 파트와의 효율적인 작업 파이프라인 구축
- 프로젝트 초기 단계에서 복잡한 시스템 참조 대신 빠르고 확실한 테스트가 가능한 MVP(최소 기능 제품) 마인드셋 기반의 토글 및 필터링 로직 구현
🟧 1. UI 갱신 최적화와 리플리케이트 콜백(ReplicatedUsing)
🟦 ReplicatedUsing과 델리게이트 연동을 통한 데이터-UI 동기화
서버 권한(Authority) 측에서 인벤토리 데이터 배열이 변동될 때, 이를 클라이언트(Proxy)에게 즉시 통지하고 클라이언트의 UMG UI를 자동으로 갱신하기 위해 OnRep 콜백 함수와 델리게이트(Delegate) 파이프라인을 구축하였다.
🟦 배열 독립성에 기반한 갱신 오버헤드 최소화 (최적화)
메인 인벤토리(Items)와 플레이어 전용 퀵슬롯(QuickSlots)은 물리적으로 독립적인 메모리 배열 구조를 가진다. 따라서 데이터 변화를 통지하는 델리게이트(확성기)도 별도로 할당해야 불필요한 전체 갱신 오버헤드를 막을 수 있음을 체감하였다. 퀵슬롯 전용 OnRep_QuickSlots 콜백을 추가 구현하여 메인 가방 데이터가 변할 때는 퀵슬롯 UI가 반응하지 않고, 오직 퀵슬롯 데이터가 변할 때만 해당 위젯 영역이 갱신되도록 렌더링 부하를 최적화하였다.
🟧 2. 단일 책임 원칙(SRP)에 기반한 협업 아키텍처 (아이템 파밍)
🟦 인벤토리 컴포넌트의 입력 처리 의존성 제거 (Decoupling)
인벤토리 컴포넌트 내부에서 플레이어의 'F키(상호작용)' 입력을 직접 바인딩하여 파밍 로직을 처리하도록 구현할 경우, 객체지향적 설계 원칙에 위배되며 캐릭터 클래스가 가진 다른 상호작용 입력(문 열기, NPC 대화 등)과 키보드 입력 레퍼런스가 충돌할 위험이 있다.
🟦 라인트레이스 위임 및 HasAuthority 검증
역할 분리를 위해 인벤토리 컴포넌트는 키 입력 바인딩을 완전히 제거하고, 오직 외부에서 호출 가능한 LootItem(ANCItemActor* ItemToLoot) 데이터 처리 함수만 노출하였다. 플레이어 캐릭터 클래스가 전방 라인트레이스(Raycast)를 통해 월드 액터를 탐색하고, 파밍 대상 액터 레퍼런스를 인벤토리 컴포넌트의 LootItem으로 넘겨주도록 역할을 위임하여 깃허브 코드 및 런타임 로직 충돌을 원천 차단하였다.
🟧 3. 확장성을 고려한 아이템 부모 클래스(ANCItemActor) 설계
🟦 C++ 기반의 멀티플레이어 뼈대 확립
월드에 스폰될 아이템들의 공통 C++ 부모 클래스(ANCItemActor)를 구현하였다. 생성자 단계에서 bReplicates = true를 선언하고, GameplayTag, Quantity 변수 등에 Replicated 마킹 및 GetLifetimeReplicatedProps 설정을 완료하여 데디케이티드 서버 환경에서 완벽하게 작동하는 멀티플레이어 환경을 구축하였다.
🟦 기획/디자인 파트와의 효율적 작업 파이프라인 수립
프로그래머는 백엔드 논리 및 네트워크 동기화가 완전히 검증된 '뼈대' 데이터만 C++로 제공하고, 아이템 기획자나 디자이너는 이 클래스를 상속받은 블루프린트에서 스태틱 메시와 물리 효과(Simulate Physics)를 자유롭게 추가하여 아이템을 커스터마이징할 수 있는 협업 구조를 확립하였다.
🟧 4. MVP(최소 기능 제품) 마인드셋을 적용한 퀵슬롯 하드코딩
🟦 빠르고 확실한 테스트를 위한 임시 구조 채택
1~2번(무기), 3~4번(소모품) 퀵슬롯 제한 로직을 구현하는 초기 단계에서, 유연하지만 연산이 복잡한 데이터 테이블 참조 방식 대신 C++ 조건문을 통한 인덱스 기반 태그 필터링(MatchesTag)과 스왑(Swap) 방식을 전격 채택하였다.
🟦 기술적 성찰
프로젝트 극 초기 단계에서는 시스템의 완벽한 유연성보다는, 핵심 코어 논리를 빠르고 확실하게 검증하고 테스트할 수 있는 '원자적 커밋' 구조를 만드는 MVP 마인드셋이 생산성에 얼마나 결정적인지 이해하였다. 향후 데이터 기반 시스템으로 마이그레이션하더라도 현재의 빠른 프로토타이핑은 가치가 있다.
🟧 후속 작업
- 완성된 C++ 백엔드 델리게이트(OnInventoryUpdated)를 UMG(블루프린트 위젯)와 바인딩하여 실제 화면에 인벤토리 그리드를 시각화한다.
- 아이템 드래그 앤 드롭 UI 기능 연동을 수행하여 데이터와 시각적 인터랙션을 통합한다.
🟧 핵심 요약
- ReplicatedUsing(OnRep) 콜백과 델리게이트를 분리하여 가방 데이터와 퀵슬롯 데이터가 독립적으로 UI에 반응하는 최적화 구조 완성
- 단일 책임 원칙(SRP)에 근거하여 입력 처리 권한을 캐릭터에 집중시키고 데이터 처리 권한을 인벤토리에 위임하여 유연한 협업 아키텍처 수립
- C++ 레벨에서 네트워크 동기화가 완료된 아이템 부모 클래스(ANCItemActor)를 설계하여 기획 및 디자인 파트와의 병렬 작업 생산성 확보
- 프로젝트 초기 코어 논리 검증을 위해 빠르고 직관적인 MVP 마인드셋 기반의 하드코딩 토글 및 필터링 로직 구현
'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글
| 캐릭터 상호작용 시스템 아키텍처 구현 및 포스트 프로세스 최적화 (0) | 2026.06.01 |
|---|---|
| 멀티플레이 인벤토리 코어 시스템 구축 및 네트워크 데이터 흐름 검증 (1) | 2026.05.29 |
| 게임플레이 태그 기반 인벤토리 C++ 아키텍처 및 코어 로직 구현 (0) | 2026.05.27 |
| 캐릭터 상태 제어 리팩토링 및 멀티플레이 동기화 (0) | 2026.05.26 |
| 언리얼 엔진 5 AI 기초 시스템 및 경로 탐색 아키텍처 정리 (1) | 2026.05.22 |

