From 8f3b80492ed2d9c44f3366ab0af784b8f1a206a1 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 3 Oct 2025 22:30:44 +0200 Subject: [PATCH] Fix terrain physics error on end play when it's disabled #3590 #3603 --- Source/Engine/Terrain/Terrain.cpp | 4 ---- Source/Engine/Terrain/TerrainPatch.cpp | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Source/Engine/Terrain/Terrain.cpp b/Source/Engine/Terrain/Terrain.cpp index f13d3bcc4..ace6246b2 100644 --- a/Source/Engine/Terrain/Terrain.cpp +++ b/Source/Engine/Terrain/Terrain.cpp @@ -852,9 +852,7 @@ void Terrain::OnEnable() { auto patch = _patches[i]; if (patch->_physicsActor) - { PhysicsBackend::AddSceneActor(scene, patch->_physicsActor); - } } // Base @@ -873,9 +871,7 @@ void Terrain::OnDisable() { auto patch = _patches[i]; if (patch->_physicsActor) - { PhysicsBackend::RemoveSceneActor(scene, patch->_physicsActor); - } } // Base diff --git a/Source/Engine/Terrain/TerrainPatch.cpp b/Source/Engine/Terrain/TerrainPatch.cpp index a9388224d..f73a7552c 100644 --- a/Source/Engine/Terrain/TerrainPatch.cpp +++ b/Source/Engine/Terrain/TerrainPatch.cpp @@ -2218,7 +2218,8 @@ void TerrainPatch::DestroyCollision() void* scene = _terrain->GetPhysicsScene()->GetPhysicsScene(); PhysicsBackend::RemoveCollider(_terrain); - PhysicsBackend::RemoveSceneActor(scene, _physicsActor); + if (_terrain->IsDuringPlay() && _terrain->IsActiveInHierarchy()) + PhysicsBackend::RemoveSceneActor(scene, _physicsActor); PhysicsBackend::DestroyActor(_physicsActor); PhysicsBackend::DestroyShape(_physicsShape); PhysicsBackend::DestroyObject(_physicsHeightField);