diff --git a/Source/Editor/Scripting/ScriptsBuilder.cpp b/Source/Editor/Scripting/ScriptsBuilder.cpp
index ed30922f7..23cf84981 100644
--- a/Source/Editor/Scripting/ScriptsBuilder.cpp
+++ b/Source/Editor/Scripting/ScriptsBuilder.cpp
@@ -22,6 +22,7 @@
#include "Engine/Scripting/Scripting.h"
#include "Engine/Scripting/Script.h"
#include "Engine/Engine/EngineService.h"
+#include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Level/Level.h"
#include "FlaxEngine.Gen.h"
@@ -212,6 +213,7 @@ void ScriptsBuilder::Compile()
bool ScriptsBuilder::RunBuildTool(const StringView& args)
{
+ PROFILE_CPU();
const String buildToolPath = Globals::StartupFolder / TEXT("Binaries/Tools/Flax.Build.exe");
if (!FileSystem::FileExists(buildToolPath))
{
@@ -269,6 +271,7 @@ void ScriptsBuilderImpl::GetClassName(const MString& fullname, MString& classNam
MClass* ScriptsBuilder::FindScript(const StringView& scriptName)
{
+ PROFILE_CPU();
const MString scriptNameStd = scriptName.ToStringAnsi();
const ScriptingTypeHandle scriptingType = Scripting::FindScriptingType(scriptNameStd);
diff --git a/Source/Engine/Physics/Colliders/CharacterController.cpp b/Source/Engine/Physics/Colliders/CharacterController.cpp
index 68fd8bfbe..c5edb9bda 100644
--- a/Source/Engine/Physics/Colliders/CharacterController.cpp
+++ b/Source/Engine/Physics/Colliders/CharacterController.cpp
@@ -409,7 +409,9 @@ void CharacterController::OnTransformChanged()
const PxExtendedVec3 pos(_transform.Translation.X, _transform.Translation.Y, _transform.Translation.Z);
_controller->setPosition(pos);
- UpdateScale();
+ const Vector3 scale = GetScale();
+ if (!Vector3::NearEqual(_cachedScale, scale))
+ UpdateGeometry();
UpdateBounds();
}
else if (!_controller)
diff --git a/Source/Engine/Physics/Colliders/Collider.cpp b/Source/Engine/Physics/Colliders/Collider.cpp
index cc45f3f51..9d4766f34 100644
--- a/Source/Engine/Physics/Colliders/Collider.cpp
+++ b/Source/Engine/Physics/Colliders/Collider.cpp
@@ -233,21 +233,13 @@ void Collider::Attach(RigidBody* rigidBody)
// Attach
rigidBody->GetPhysXRigidActor()->attachShape(*_shape);
- _shape->setLocalPose(PxTransform(C2P((_localTransform.Translation + _localTransform.Orientation * _center) * rigidBody->GetScale()), C2P(_localTransform.Orientation)));
+ _cachedLocalPosePos = (_localTransform.Translation + _localTransform.Orientation * _center) * rigidBody->GetScale();
+ _cachedLocalPoseRot = _localTransform.Orientation;
+ _shape->setLocalPose(PxTransform(C2P(_cachedLocalPosePos), C2P(_cachedLocalPoseRot)));
if (rigidBody->IsDuringPlay())
rigidBody->UpdateBounds();
}
-void Collider::UpdateScale()
-{
- const Vector3 scale = GetScale();
- if (Vector3::NearEqual(_cachedScale, scale))
- return;
-
- // Recreate shape geometry
- UpdateGeometry();
-}
-
void Collider::UpdateLayerBits()
{
ASSERT(_shape);
@@ -519,10 +511,18 @@ void Collider::OnTransformChanged()
}
else if (const RigidBody* rigidBody = GetAttachedRigidBody())
{
- _shape->setLocalPose(PxTransform(C2P((_localTransform.Translation + _localTransform.Orientation * _center) * rigidBody->GetScale()), C2P(_localTransform.Orientation)));
+ const Vector3 localPosePos = (_localTransform.Translation + _localTransform.Orientation * _center) * rigidBody->GetScale();
+ if (_cachedLocalPosePos != localPosePos || _cachedLocalPoseRot != _localTransform.Orientation)
+ {
+ _cachedLocalPosePos = localPosePos;
+ _cachedLocalPoseRot = _localTransform.Orientation;
+ _shape->setLocalPose(PxTransform(C2P(localPosePos), C2P(_cachedLocalPoseRot)));
+ }
}
- UpdateScale();
+ const Vector3 scale = GetScale();
+ if (!Vector3::NearEqual(_cachedScale, scale))
+ UpdateGeometry();
UpdateBounds();
}
diff --git a/Source/Engine/Physics/Colliders/Collider.h b/Source/Engine/Physics/Colliders/Collider.h
index 50ac3b8db..1c78f57ce 100644
--- a/Source/Engine/Physics/Colliders/Collider.h
+++ b/Source/Engine/Physics/Colliders/Collider.h
@@ -26,6 +26,8 @@ protected:
PxRigidStatic* _staticActor;
Vector3 _cachedScale;
float _contactOffset;
+ Vector3 _cachedLocalPosePos;
+ Quaternion _cachedLocalPoseRot;
public:
@@ -166,11 +168,6 @@ public:
protected:
- ///
- /// Updates the shape scale (may be modified when actor transformation changes).
- ///
- void UpdateScale();
-
///
/// Updates the shape actor collisions/queries layer mask bits.
///