diff --git a/Source/Engine/Navigation/NavMesh.cpp b/Source/Engine/Navigation/NavMesh.cpp index a6076cbbd..5b5220898 100644 --- a/Source/Engine/Navigation/NavMesh.cpp +++ b/Source/Engine/Navigation/NavMesh.cpp @@ -105,10 +105,8 @@ void NavMesh::OnDataAssetLoaded() if (Data.Tiles.HasItems()) return; - const bool isEnabled = IsDuringPlay() && IsActiveInHierarchy(); - // Remove added tiles - if (isEnabled) + if (_navMeshActive) { RemoveTiles(); } @@ -120,7 +118,7 @@ void NavMesh::OnDataAssetLoaded() IsDataDirty = false; // Add loaded tiles - if (isEnabled) + if (_navMeshActive) { AddTiles(); } @@ -156,15 +154,36 @@ void NavMesh::OnEnable() // Base Actor::OnEnable(); - GetScene()->Navigation.Meshes.Add(this); - AddTiles(); + if (!_navMeshActive) + { + GetScene()->Navigation.Meshes.Add(this); + AddTiles(); + _navMeshActive = true; + } } void NavMesh::OnDisable() { - RemoveTiles(); - GetScene()->Navigation.Meshes.Remove(this); + if (_navMeshActive) + { + RemoveTiles(); + GetScene()->Navigation.Meshes.Remove(this); + _navMeshActive = false; + } // Base Actor::OnDisable(); } + +void NavMesh::Initialize() +{ + // Base + Actor::Initialize(); + + if (!_navMeshActive && IsActiveInHierarchy()) + { + GetScene()->Navigation.Meshes.Add(this); + AddTiles(); + _navMeshActive = true; + } +} diff --git a/Source/Engine/Navigation/NavMesh.h b/Source/Engine/Navigation/NavMesh.h index 76a4eb963..8e1659ff4 100644 --- a/Source/Engine/Navigation/NavMesh.h +++ b/Source/Engine/Navigation/NavMesh.h @@ -68,6 +68,9 @@ private: void RemoveTiles(); void OnDataAssetLoaded(); +private: + bool _navMeshActive = false; + public: // [Actor] void Serialize(SerializeStream& stream, const void* otherObj) override; @@ -77,4 +80,5 @@ protected: // [Actor] void OnEnable() override; void OnDisable() override; + void Initialize() override; };