diff --git a/Source/Engine/Physics/Actors/RigidBody.cpp b/Source/Engine/Physics/Actors/RigidBody.cpp index 08b8eb0ed..062264b58 100644 --- a/Source/Engine/Physics/Actors/RigidBody.cpp +++ b/Source/Engine/Physics/Actors/RigidBody.cpp @@ -159,9 +159,10 @@ void RigidBody::SetCenterOfMassOffset(const Float3& value) { if (value == _centerOfMassOffset) return; + Float3 delta = value - _centerOfMassOffset; _centerOfMassOffset = value; if (_actor) - PhysicsBackend::SetRigidDynamicActorCenterOfMassOffset(_actor, _centerOfMassOffset); + PhysicsBackend::AddRigidDynamicActorCenterOfMassOffset(_actor, delta); } void RigidBody::SetConstraints(const RigidbodyConstraints value) @@ -356,9 +357,7 @@ void RigidBody::OnDebugDrawSelected() { const auto collider = Cast(child); if (collider && collider->GetAttachedRigidBody() == this) - { collider->OnDebugDrawSelf(); - } } Actor::OnDebugDrawSelected(); @@ -534,7 +533,7 @@ void RigidBody::BeginPlay(SceneBeginData* data) // Apply the Center Of Mass offset if (!_centerOfMassOffset.IsZero()) - PhysicsBackend::SetRigidDynamicActorCenterOfMassOffset(_actor, _centerOfMassOffset); + PhysicsBackend::AddRigidDynamicActorCenterOfMassOffset(_actor, _centerOfMassOffset); // Register actor PhysicsBackend::AddSceneActor(scene, _actor); diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index b023b49f7..0c23a1881 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -2482,7 +2482,7 @@ Vector3 PhysicsBackend::GetRigidDynamicActorCenterOfMass(void* actor) return P2C(actorPhysX->getCMassLocalPose().p); } -void PhysicsBackend::SetRigidDynamicActorCenterOfMassOffset(void* actor, const Float3& value) +void PhysicsBackend::AddRigidDynamicActorCenterOfMassOffset(void* actor, const Float3& value) { auto actorPhysX = (PxRigidDynamic*)actor; auto pose = actorPhysX->getCMassLocalPose(); diff --git a/Source/Engine/Physics/PhysicsBackend.h b/Source/Engine/Physics/PhysicsBackend.h index dacd6c7fd..4307d2c6d 100644 --- a/Source/Engine/Physics/PhysicsBackend.h +++ b/Source/Engine/Physics/PhysicsBackend.h @@ -164,7 +164,7 @@ public: static Vector3 GetRigidDynamicActorAngularVelocity(void* actor); static void SetRigidDynamicActorAngularVelocity(void* actor, const Vector3& value, bool wakeUp); static Vector3 GetRigidDynamicActorCenterOfMass(void* actor); - static void SetRigidDynamicActorCenterOfMassOffset(void* actor, const Float3& value); + static void AddRigidDynamicActorCenterOfMassOffset(void* actor, const Float3& value); static bool GetRigidDynamicActorIsSleeping(void* actor); static void RigidDynamicActorSleep(void* actor); static void RigidDynamicActorWakeUp(void* actor);