스켈 레탈 메시의 뼈를 C ++의 특정 위치로 설정하는 방법이 있는지 알고 싶습니다. 청사진을 사용하고 싶지 않아서 좋은 방법을 찾지 못했습니다.
UPoseableMeshComponent를 찾습니다. 스켈레톤의 각 뼈대에 대한 변형을 설정할 수 있습니다.
편집하다:
다음은 프로젝트에서 PoseableMeshComponent를 사용하는 방법의 예입니다. 제 경우에는 mocap 데이터에 의해 구동되는 골격을 복제하고 있습니다. mocap 데이터는 네트워킹 소켓에서 수신되어 다음과 같은 구조체에 저장됩니다.
USTRUCT()
struct FSkeletonData
{
GENERATED_USTRUCT_BODY()
FSkeletonData()
: Scale(1.0f)
{}
/**
* The bones' location
*/
UPROPERTY(VisibleAnywhere)
TArray<FVector> Locations;
/**
* The bones' rotation
*/
UPROPERTY(VisibleAnywhere)
TArray<FQuat> Rotations;
/**
* Scale of the skeletal mesh
*/
UPROPERTY(VisibleAnywhere)
float Scale;
}
이 데이터를 수신하는 클래스에는 PoseableMeshComponent가 있으며 다음과 같이이 구조체를 기반으로 업데이트합니다.
int32 NumBones = PoseableMeshComponent->GetNumBones();
for (int32 i = 0; i < NumBones; ++i)
{
FName const BoneName = PoseableMeshComponent->GetBoneName(i);
FTransform Transform(SkeletonDataActual.Rotations[i], SkeletonDataActual.Locations[i], FVector(SkeletonDataActual.Scale));
PoseableMeshComponent->SetBoneTransformByName(BoneName, Transform, EBoneSpaces::WorldSpace);
}
PoseableMeshComponent->SetWorldScale3D(FVector(SkeletonDataActual.Scale));
SkeletonDataActual은 FSkeletonData 유형이며 이러한 위치는 World Space에 있습니다. 로컬 공간에서 작동하려면 액터의 위치 및 / 또는 로테이션을 추가해야 할 수 있습니다.
도움이되기를 바랍니다. 행운을 빕니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다