diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index fb067a9..44ba25a 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -386,6 +386,37 @@
     {
 
     }
+    
+    /// <summary>
+    /// 子类需要重写 _EnterTree() 函数, 请重写 EnterTree()
+    /// </summary>
+    public sealed override void _EnterTree()
+    {
+#if TOOLS
+        // 在工具模式下创建的 template 节点自动创建对应的必要子节点
+        if (Engine.IsEditorHint())
+        {
+            _InitNodeInEditor();
+            return;
+        }
+#endif
+        EnterTree();
+    }
+    
+    /// <summary>
+    /// 子类需要重写 _ExitTree() 函数, 请重写 ExitTree()
+    /// </summary>
+    public sealed override void _ExitTree()
+    {
+#if TOOLS
+        // 在工具模式下创建的 template 节点自动创建对应的必要子节点
+        if (Engine.IsEditorHint())
+        {
+            return;
+        }
+#endif
+        ExitTree();
+    }
 
     /// <summary>
     /// 显示并更新阴影
@@ -471,6 +502,20 @@
     }
     
     /// <summary>
+    /// 进入场景树时调用
+    /// </summary>
+    public virtual void EnterTree()
+    {
+    }
+
+    /// <summary>
+    /// 离开场景树时调用
+    /// </summary>
+    public virtual void ExitTree()
+    {
+    }
+    
+    /// <summary>
     /// 返回是否能与其他ActivityObject互动
     /// </summary>
     /// <param name="master">触发者</param>
diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
index a602808..c9f9a7f 100644
--- a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
@@ -103,7 +103,7 @@
         StateController.ChangeStateInstant(AiStateEnum.AiNormal);
     }
 
-    public override void _EnterTree()
+    public override void EnterTree()
     {
         if (!World.Enemy_InstanceList.Contains(this))
         {
@@ -111,7 +111,7 @@
         }
     }
 
-    public override void _ExitTree()
+    public override void ExitTree()
     {
         World.Enemy_InstanceList.Remove(this);
     }
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
index be9b74e..e12efa8 100644
--- a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
+++ b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
@@ -431,7 +431,7 @@
         return 1;
     }
 
-    public override void _EnterTree()
+    public override void EnterTree()
     {
         //收集落在地上的武器
         if (IsInGround())
@@ -440,7 +440,7 @@
         }
     }
 
-    public override void _ExitTree()
+    public override void ExitTree()
     {
         World.Weapon_UnclaimedWeapons.Remove(this);
     }