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. ///