UXZModularComponent::UXZModularComponent()
{
...
ModuleHandlerMap.Add(EModularMeshType::Backpack, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("BackpackModule")));
ModuleHandlerMap.Add(EModularMeshType::Belt, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("BeltModule")));
ModuleHandlerMap.Add(EModularMeshType::Foots, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("FootsModule")));
ModuleHandlerMap.Add(EModularMeshType::Hands, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("HandsModule")));
ModuleHandlerMap.Add(EModularMeshType::Heads, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("HeadsModule")));
ModuleHandlerMap.Add(EModularMeshType::Helmet, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("HelmetModule")));
ModuleHandlerMap.Add(EModularMeshType::Vest, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("VestModule")));
ModuleHandlerMap.Add(EModularMeshType::Pants, CreateDefaultSubobject<UXZSkeletalMeshModuleComponent>(TEXT("PantsModule")));
}
void UXZModularComponent::InitializeComponent()
{
Super::InitializeComponent();
...
ModuleHandlerMap[EModularMeshType::Backpack]->SetCharacter(Character);
ModuleHandlerMap[EModularMeshType::Belt]->SetCharacter(Character);
ModuleHandlerMap[EModularMeshType::Foots]->SetCharacter(Character);
ModuleHandlerMap[EModularMeshType::Hands]->SetCharacter(Character);
ModuleHandlerMap[EModularMeshType::Heads]->SetCharacter(Character);
ModuleHandlerMap[EModularMeshType::Helmet]->SetCharacter(Character);
ModuleHandlerMap[EModularMeshType::Vest]->SetCharacter(Character);
ModuleHandlerMap[EModularMeshType::Pants]->SetCharacter(Character);
}
MoudlarComponent에서 생성한 SkeletalModuleComponent 객체들을 TMap 컨테이너로 추가하였다.
void UXZSkeletalMeshModuleComponent::Attach(int32 ItemID)
{
if ( UXZDataManager* DataManager = UGameInstance::GetSubsystem<UXZDataManager>(GetWorld()->GetGameInstance()) )
{
if ( FItemTable_Module* ModuleInfo = DataManager->TryGetModuleAsset(ModuleIDName) )
{
ensure(MeshComponent);
ensure(Character);
ensure(Character->GetMesh());
if ( USkeletalMesh* SkeletalMesh = LoadObject<USkeletalMesh>(nullptr, *ModuleInfo->ASSETPATH))
{
MeshComponent->SetSkeletalMesh(SkeletalMesh);
MeshComponent->AttachToComponent(Character->GetMesh(), FAttachmentTransformRules::KeepRelativeTransform);
MeshComponent->SetMasterPoseComponent(Character->GetMesh());
}
else
{
UE_LOG(LogTemp, Error, TEXT("Failed to load SkeletalMesh at path: %s"), *ModuleInfo->ASSETPATH);
}
}
}
}
- 그리고
UXZSkeletalMeshModuleComponent에서 자신이 가지고 있는 타입의 모듈의 SkeletalMeshComponent에 SkeletalMesh 애셋을 설정해주었다.