You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE5.4.3中如何在Tick时获取自定义GeometryCollection骨骼的质量与速度

Unreal Engine 5.4.3 获取GeometryCollection中每个骨骼的质量、线速度和角速度

问题修正说明

原代码引用了私有目录头文件Runtime/Experimental/Chaos/Private/Chaos/PhysicsObjectInternal.h,这属于不规范做法——私有目录的头文件不属于公开API,会引发编译兼容性问题,且引擎版本更新后大概率失效。以下是基于公开API的正确实现:

完整实现代码

#include "GeometryCollection/GeometryCollectionComponent.h"
#include "Chaos/PBDRigidClusteredParticleHandle.h"
#include "Chaos/PhysicsProxy.h"

void ACustomGeometryCollection::Tick(float DeltaSeconds)
{
    Super::Tick(DeltaSeconds);

    if (!GeometryCollectionComponent.IsValid())
    {
        return;
    }

    // 获取GeometryCollection的PhysicsProxy
    Chaos::TPhysicsProxy<Chaos::FPBDRigidClusteredPhysics>* PhysicsProxy = 
        GeometryCollectionComponent->GetPhysicsProxy<Chaos::TPhysicsProxy<Chaos::FPBDRigidClusteredPhysics>>();

    if (!PhysicsProxy)
    {
        return;
    }

    const int32 NumTransforms = GeometryCollectionComponent->GetDynamicCollection()->GetNumTransforms();
    for (int32 i = 0; i < NumTransforms; ++i)
    {
        // 获取对应索引的粒子句柄
        Chaos::FPBDRigidClusteredParticleHandle* ParticleHandle = PhysicsProxy->GetParticle(i);
        if (!ParticleHandle)
        {
            continue;
        }

        // 获取质量
        const float Mass = ParticleHandle->GetMass();
        // 获取全局空间线速度
        const FVector LinearVelocity = ParticleHandle->GetLinearVelocity();
        // 获取全局空间角速度
        const FVector AngularVelocity = ParticleHandle->GetAngularVelocity();

        // 示例:打印数据
        UE_LOG(LogTemp, Log, TEXT("骨骼索引%d: 质量=%.2f, 线速度=(%.2f,%.2f,%.2f), 角速度=(%.2f,%.2f,%.2f)"),
            i, Mass,
            LinearVelocity.X, LinearVelocity.Y, LinearVelocity.Z,
            AngularVelocity.X, AngularVelocity.Y, AngularVelocity.Z);
    }
}

关键说明

  • 空指针检查:必须先验证GeometryCollectionComponent和PhysicsProxy的有效性,避免运行时崩溃
  • 粒子句柄获取:使用公开接口GetParticle(i)替代私有接口GetParticle_Internal(i)
  • 属性获取方法:
    • 质量:ParticleHandle->GetMass()
    • 线速度:ParticleHandle->GetLinearVelocity()(返回全局空间下的FVector)
    • 角速度:ParticleHandle->GetAngularVelocity()(返回全局空间下的FVector)
  • 头文件规范:仅引用公开的Chaos头文件,无需依赖私有目录内容

内容的提问来源于stack exchange,提问作者Nick Charney Kaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:22:43