2016-11-28 112 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

相關問題