KoreanFoodie's Study
[언리얼] UPoseableMeshComponent 는 무엇일까? 본문
UPoseableMeshComponent
언리얼에서 GhostTrail 등을 구현할 때, UPoseableMeshComponent 를 사용하는 것을 볼 수 있다. UPosebleMeshComponent 는 무엇일까?
먼저 정의로 넘어가보면,
/**
* UPoseableMeshComponent that allows bone transforms to be driven by blueprint.
*/
UCLASS(ClassGroup=Rendering, hidecategories=(Object,Physics), config=Engine, editinlinenew, meta=(BlueprintSpawnableComponent))
class ENGINE_API UPoseableMeshComponent : public USkinnedMeshComponent
...
다음과 같이 되어 있는데, 블루프린트에 의해 골격이 바뀔 수 있다.. 고 되어있다. USkinnedMeshComponent 를 상속받고 있는데, USkinnedMeshComponent 는
/**
*
* Skinned mesh component that supports bone skinned mesh rendering.
* This class does not support animation.
*
* @see USkeletalMeshComponent
*/
UCLASS(hidecategories=Object, config=Engine, editinlinenew, abstract)
class ENGINE_API USkinnedMeshComponent : public UMeshComponent, public ILODSyncInterface
다음과 같은데, 애니메이션이 아닌 표면 메시 렌더링을 해주는 녀석이다. 그러니까, 딱 표면 렌더링을 하겠다.. 뭐 이렇게 받아들이면 될 것 같다.
UPosebleMeshComponent 에 OwnerCharacter 의 SkeletalMesh 를 설정하고, 각 Material 에 우리가 만든 DynamicMateral 을 달아주면 된다.
OwnerCharacter = Cast<ACharacter>(GetOwner());
Poseable->SetSkeletalMesh(OwnerCharacter->GetMesh()->SkeletalMesh);
Poseable->CopyPoseFromSkeletalComponent(OwnerCharacter->GetMesh());
DynamicMaterial = UMaterialInstanceDynamic::Create(Material, this);
for (int32 i = 0; i < OwnerCharacter->GetMesh()->SkeletalMesh->Materials.Num(); i++)
Poseable->SetMaterial(i, DynamicMaterial);
그 후, timerDelegate 를 이용해서 일정 간격으로 재생시켜주면 된다.
FTimerDelegate timerDelegate = FTimerDelegate::CreateLambda([=]()
{
if (Poseable->IsVisible() == false)
Poseable->ToggleVisibility();
float height = OwnerCharacter->GetCapsuleComponent()->GetScaledCapsuleHalfHeight();
SetActorLocation(OwnerCharacter->GetActorLocation() - FVector(0, 0, height));
SetActorRotation(OwnerCharacter->GetActorRotation() + FRotator(0, -90, 0));
Poseable->CopyPoseFromSkeletalComponent(OwnerCharacter->GetMesh());
CLog::Print("SetActorRotation");
});
GetWorld()->GetTimerManager().SetTimer(TimerHandle, timerDelegate, Interval, true, StartDelay);
'Game Dev > Unreal C++ : Dev Log' 카테고리의 다른 글
[언리얼] UFUNCTION 과 FORCEINLINE 을 같이 사용하지 말자 (2) | 2022.06.20 |
---|---|
[언리얼] 플레이어 캐릭터 움직이기 + 시점 변경 간단 설정 (0) | 2022.05.19 |
[언리얼] 특정 액터에 Attached 된 액터 삭제하기 (0) | 2022.04.19 |
[언리얼] Helper Function : 오브젝트 생성 및 애셋 불러오기 (0) | 2022.04.19 |
[언리얼] Helper Function - 로그 (Log) 2 : 화면에 출력하기 (0) | 2022.04.19 |
Comments