【问题标题】:(UE4) How can i set the position of bones using c++ only [closed](UE4)如何仅使用 C++ 设置骨骼的位置 [关闭]
【发布时间】:2016-11-28 11:38:31
【问题描述】:

我只是想知道是否有一种方法可以将骨架网格的骨骼设置到 C++ 中的特定位置。我不想使用蓝图,也没有找到好的方法。

【问题讨论】:

    标签: c++ unreal-engine4


    【解决方案1】:

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

    编辑:

    这是我如何在项目中使用 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 类型,并且这些位置位于世界空间中。如果您希望演员在本地空间中工作,您可能需要添加演员的位置和/或旋转。

    希望对你有帮助,祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-03
      • 2021-10-10
      • 2020-09-22
      • 2021-09-10
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      相关资源
      最近更新 更多