2016-11-28 25 views
-3

骨格メッシュのボーンをC++の特定の位置に設定する方法があるかどうかを知りたいと思っています。私は青写真を使用したくないので、私はそれを行う良い方法を見つけることができませんでした。(UE4)C++のみを使用して骨の位置を設定するには

+0

トピック以外の質問ですので、質問を編集してください。あなたの質問はコーディングに関する質問ではありませんので、私はあなたの問題をGoogleに入力しようとしています。なぜなら、UnrealエンジンのC++でアクターを管理するチュートリアルがたくさんあるからです。後で何を試してみてください。また、あなたのタグ(Unreal Engine)を正しく置くことを忘れないでください。それから私たちはあなたを助けることができた。 – uelordi

答えて

1

UPoseableMeshComponentをルックアップします。スケルトンのボーンごとにトランスフォームを設定することができます。

編集:

は、ここで私は、プロジェクトでPoseableMeshComponentを使用する方法の例です。私の場合、私はモコップデータによって動かされるスケルトンを複製しています。モーションキャプチャーデータは、ネットワークソケットから受信し、このように見える構造体に格納されています

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型であり、これらの位置はワールドスペースにあることに注意してください。アクタの位置や回転を追加する必要があるかもしれません。

あなたに役立つ希望、幸運!

+0

あなたは、UPoseableMeshComponentの使い方の例を挙げることができますか?私はこれを使う方法の良い例を見つけられませんでした。 – Wolff

関連する問題