diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index 7b4d69c..e294583 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -628,6 +628,20 @@
     }
 
     /// <summary>
+    /// 添加组件时调用
+    /// </summary>
+    public virtual void OnAddComponent(Component component)
+    {
+    }
+
+    /// <summary>
+    /// 移除组件时调用
+    /// </summary>
+    public virtual void OnRemoveComponent(Component component)
+    {
+    }
+
+    /// <summary>
     /// 返回当物体 CollisionLayer 是否能与 mask 层碰撞
     /// </summary>
     public bool CollisionWithMask(uint mask)
@@ -773,6 +787,7 @@
         component.Master = this;
         component.Ready();
         component.OnEnable();
+        OnAddComponent(component);
         return component;
     }
 
@@ -794,6 +809,7 @@
         component.Master = this;
         component.Ready();
         component.OnEnable();
+        OnAddComponent(component);
         return component;
     }
 
@@ -811,6 +827,7 @@
         if (_updatingComp)
         {
             _changeComponents.Add(new KeyValuePair<Component, bool>(component, false));
+            OnRemoveComponent(component);
             component.Destroy();
         }
         else
@@ -820,6 +837,7 @@
                 if (_components[i].Value == component)
                 {
                     _components.RemoveAt(i);
+                    OnRemoveComponent(component);
                     component.Destroy();
                     return;
                 }
diff --git a/DungeonShooting_Godot/src/framework/ui/UiBase.cs b/DungeonShooting_Godot/src/framework/ui/UiBase.cs
index 2827ffe..0e11d89 100644
--- a/DungeonShooting_Godot/src/framework/ui/UiBase.cs
+++ b/DungeonShooting_Godot/src/framework/ui/UiBase.cs
@@ -81,23 +81,6 @@
         UiManager.RecordUi(this, UiManager.RecordType.Open);
     }
 
-    public sealed override void _Ready()
-    {
-        if (Math.Abs(Scale.X - 1f) > 0.001f)
-        {
-            Resized += OnResizeUi;
-        }
-    }
-
-    private void OnResizeUi()
-    {
-        if (ParentUi == null)
-        {
-            var viewportSize = GameApplication.Instance.ViewportSize;
-            Size = viewportSize;
-        }
-    }
-
     /// <summary>
     /// 创建当前ui时调用
     /// </summary>
diff --git a/DungeonShooting_Godot/src/game/buff/BuffBase.cs b/DungeonShooting_Godot/src/game/buff/BuffBase.cs
new file mode 100644
index 0000000..45a4e6e
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/buff/BuffBase.cs
@@ -0,0 +1,4 @@
+
+public abstract partial class BuffBase : Component<Role>
+{
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/buff/Buff_MoveSpeed.cs b/DungeonShooting_Godot/src/game/buff/Buff_MoveSpeed.cs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/buff/Buff_MoveSpeed.cs