10-22 기준, 상범, 여울
null 체크 필수
Lyra 같은 모던 시스템에서는 메인 캐릭터 메시를 invisible로 설정하거나 아예 안 넣는 경우가 많음
대신 보이는 모든 파츠들을 Character Part로 처리하기
GetParentMeshComponent()가 nullptr을 반환할 수 있으니까 이 함수를 사용하는 모든 곳에서 null 체크를 반드시 해야함
그렇지 않으면 크래시 날 수 있음!
예를 들면:
// CharacterPartComponent.cpp
void UCharacterPartComponent::SetCharacterPart(const FCharacterPart& NewPart)
{
USkeletalMeshComponent* ParentMesh = GetParentMeshComponent(); *// 부모 메시 컴포넌트를 가져오는 함수입니다*
if (!ParentMesh) *// nullptr 체크를 수행합니다*
{
UE_LOG(LogTemp, Warning, TEXT("ParentMesh가 없어서 파츠를 장착할 수 없습니다"));
return; *// 함수를 종료합니다*
}
// 이제 안전하게 ParentMesh를 사용할 수 있습니다
// ... 나머지 로직
}
몸통 메시가 없다면 마스터 포즈 컴포넌트를 다르게 설정해야 할 수도 있음
예를 들어 첫 번째로 추가되는 파츠(머리든 몸통이든)를 마스터로 삼고, 나머지 파츠들이 그걸 따라가게 하는 식
정리하면:
UE5 Lyra: Character Parts Overview
Lyra Character Parts
Explore the Exciting Character Parts in UE5 Lyra
마스터 포즈 컴포넌트는 여러 개로 쪼개진 스켈레탈 메시들이 같은 애니메이션을 공유하게 만드는 기능
캐릭터를 머리, 몸통, 팔, 다리로 각각 쪼갰다고 생각하면 각 파츠가 따로따로 애니메이션을 재생하면 엄청난 낭비!
그래서 하나의 메시를 "마스터(리더)"로 정하고, 나머지 파츠들은 그 마스터의 애니메이션을 그대로 따라하게 만드는 것
모듈러 캐릭터에서 각 파츠별로 독립적인 스켈레탈 메시를 쓰면, 같은 애니메이션을 각각 계산하느라 드로우콜과 성능 비용이 그 숫자만큼 비례해서 증가함
마스터 포즈를 쓰면 애니메이션 계산은 마스터 하나만 하고, 나머지는 그 결과를 참조만 하니까 훨씬 효율적
Construction Script나 BeginPlay에서 설정해:
*// CharacterPartComponent.cpp 예시*
void UCharacterPartComponent::AttachPartToMaster(USkeletalMeshComponent* NewPart)
{
if (!NewPart) return; *// nullptr 체크를 수행합니다*
USkeletalMeshComponent* MasterMesh = GetOwner()->FindComponentByClass<USkeletalMeshComponent>(); *// 마스터가 될 메시 컴포넌트를 찾습니다*
if (MasterMesh) *// 마스터 메시가 존재하는지 확인합니다*
{
NewPart->SetLeaderPoseComponent(MasterMesh); *// 새 파츠가 마스터 메시의 포즈를 따라가도록 설정합니다*
}
}
블루프린트에서는 Set Leader Pose Component 노드를 사용하면 된다.
참고로 UE5.1부터는 "Master Pose Component"에서 "Leader Pose Component"로 이름이 바뀜!
예를 들어 눈, 입, 수염을 따로 두지 말고 "머리"로 병합하고, 머리-몸통-팔-다리 4개만 마스터 포즈로 연결하는 식
How To Use The Master Pose Component In Unreal Engine
Unreal Engine 5.1 Tutorial Modular Characters Using Leader Pose Component
Skeletal Mesh 모듈화 기능 ( Set Leader Pose Component )