diff --git a/Engine.Core/GameManager.cs b/Engine.Core/GameManager.cs index 8d12255..db797d3 100644 --- a/Engine.Core/GameManager.cs +++ b/Engine.Core/GameManager.cs @@ -78,6 +78,7 @@ public class GameManager : BaseEntity, IGameManager Remove(child); _hierarchyObjects.Remove(hierarchyObject); + hierarchyObject.SetParent(null); if (!hierarchyObject.ExitHierarchy()) throw new Exception($"{hierarchyObject.Name} can't exit the hierarchy"); diff --git a/Engine.Core/HierarchyObject.cs b/Engine.Core/HierarchyObject.cs index f6f9380..c9fb225 100644 --- a/Engine.Core/HierarchyObject.cs +++ b/Engine.Core/HierarchyObject.cs @@ -62,8 +62,9 @@ public class HierarchyObject : BaseEntity, IHierarchyObject if (!IsInHierarchy || _gameManager is not IGameManager gameManager) return false; - _gameManager = null!; OnExitingHierarchy(gameManager); + _gameManager = null!; + SetParent(null); OnExitedHierarchy?.Invoke(this, gameManager); return true; } @@ -87,6 +88,9 @@ public class HierarchyObject : BaseEntity, IHierarchyObject if (parent is not null) { + if (parent.IsInHierarchy && !IsInHierarchy) + parent.GameManager.Register(this); + parent.AddChild(this); parent.OnActiveChanged += OnParentActiveChanged; }