모듈러 캐릭터를 구현하기 위하여, 일단 제가 개발해야 하는 것이 어떤 것인지 적어봤습니다.
모듈 시스템
커스터마이징 기능
Moudle과 관련된 데이터를 로드하는 유틸리티 기능 => Datamanager DataManager 링크
Module을 관리하는 시스템 -> ModularComponent
Module 커스터마이징 UI 시스템 -> CustomizingLayer UI 시스템 링크
모듈을 관리하는 기능은 한 번에 설계된 것이 아니라 여러 번의 과정을 거쳐 개선되었습니다.


AXZModularComponent
BaseModuleComponent
SkeletalMeshModuleComponent
BaseItem
- ModuleComponent에서 상태를 관리하기 위해 FSM(상태 머신)을 도입할 필요가 있을까?
- SkeletalMeshComponent를 확장한 클래스를 만들어야 할 필요가 있는가?
- Module에 해당하는 클래스를 Component로 만들어야 하는가 ? actor로 만들어야 하는가 ?
첫 번째 설계에서 모듈별로 별도의 컴포넌트를 만들어 관리했으나, 두 번째 설계에서는 모듈 타입에 따라 캐릭터의 SkeletalMeshComponent를 ModualrComponent에서 직접 관리하는 방식으로 변경되었습니다.

ModularComponent
SkeletalMeshComponent와 연결하여 수행한다.EModularMeshType의 enum 값을 바탕으로 동적으로 처리한다.
- ModuleHandlerMap 제거: 각 모듈별로 별도의 컴포넌트를 생성하는 방식에서, 캐릭터의 SkeletalMeshComponent를 직접 관리하는 방식으로 변경되었습니다.
- 모듈 이름은 EModularMeshType enum 값을 바탕으로 결정되며, GetSkeletalMeshComponent를 통해 해당 모듈의 SkeletalMeshComponent를 찾아서 Detach 및 Attach를 처리합니다.
첫 번째 설계에서는 TMap을 통해 EModularMeshType에 따른 모듈을 각각 핸들러로 관리하며, 각 모듈을 하드코딩으로 추가했습니다. 반면, 새로운 설계에서는 TMap을 제거하고, SkeletalMeshComponent와 직접 연결하여 enum 기반으로 모듈을 동적으로 처리합니다. 이를 통해 코드의 유연성과 확장성이 증가했습니다.
두번째 설계가 관리가 간소화되기 때문에 현재 프로젝트에 더 적합한 방식이라고 판단했습니다 !!
새로운 설계를 적용하니 동적 처리, 확장성, 코드의 단순성 측면에서 개선되었고 enum을 통한 동적 관리로 확장성이 높아졌습니다 !!