2016-11-28 911 views
-3

我只想知道是否有方法来设置骨骼网格的骨骼到C++中的特定位置。我不想使用蓝图,但我没有找到一个好办法。(UE4)我如何设置骨骼使用c + +的位置

+0

请编辑您的问题,因为是题外话题。你的问题不是编码问题,所以尝试在谷歌上输入你的问题,因为我确信有很多教程可以在虚幻引擎上用C++来管理Actor。稍后与我们分享您尝试的内容,并且不要忘记正确地放置您的标签(虚幻引擎)。然后我们可以帮助你。 – uelordi

回答

1

查找UPoseableMeshComponent。它允许您为每个骨架的骨骼设置变换。

编辑:

这里是我如何在项目中使用PoseableMeshComponent的例子。在我的情况下,我正在复制由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中。如果您希望它在本地空间中工作,您可能需要添加演员的位置和/或旋转角度。

希望能帮到你,祝你好运!

+0

你能提供一个关于如何使用UPoseableMeshComponent的例子吗?我没有找到一个很好的例子来说明如何使用它。 – Wolff