diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs index 0a88097..f78f577 100644 --- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs +++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs @@ -158,7 +158,7 @@ try { - _editorTools.OnDisposeUi(); + _editorTools.OnDestroyUi(); } catch (Exception e) { diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import index c36be94..b20c9a6 100644 --- a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import +++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://chd2vtesap5cf" -path="res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex" +path="res://.godot/imported/enemy0001.png-1247a3ddf8a1a163d812cad12c4340fd.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resource/sprite/role/enemy0001/Enemy0001.png" -dest_files=["res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex"] +source_file="res://resource/sprite/role/enemy0001/enemy0001.png" +dest_files=["res://.godot/imported/enemy0001.png-1247a3ddf8a1a163d812cad12c4340fd.ctex"] [params] diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import index d563acf..56388a2 100644 --- a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import +++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://d2f55lu60x64i" -path="res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex" +path="res://.godot/imported/enemy0001_Debris.png-297a2fb6680cb862a9a085cf58f8268c.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resource/sprite/role/enemy0001/Enemy0001_Debris.png" -dest_files=["res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex"] +source_file="res://resource/sprite/role/enemy0001/enemy0001_Debris.png" +dest_files=["res://.godot/imported/enemy0001_Debris.png-297a2fb6680cb862a9a085cf58f8268c.ctex"] [params] diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs index c663335..4bcc34f 100644 --- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs +++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs @@ -7,7 +7,7 @@ /// /// 房间内活动物体基类, 所有物体都必须继承该类,
-/// ActivityObject 使用的时候代码和场景分离的设计模式, 所以创建时必须指定模板场景路径, 这样做的好处是一个模板场景可以用在多个代码类上, 同样一个代码类也可以指定不同的目模板场景,
+/// 该类提供基础物体运动模拟, 互动接口, 自定义组件, 协程等功能
/// ActivityObject 子类实例化请不要直接使用 new, 而用该在类上标上 [Tool], 并在 ActivityObject.xlsx 配置文件中注册物体, 导出配置表后使用 ActivityObject.Create(id) 来创建实例.
///
public abstract partial class ActivityObject : CharacterBody2D, IDestroy, ICoroutine @@ -1196,6 +1196,8 @@ /// /// 继承指定物体的运动速率 /// + /// 目标对象 + /// 继承的速率缩放 public void InheritVelocity(ActivityObject other, float scale = 0.5f) { MoveController.AddVelocity(other.Velocity * scale); @@ -1442,8 +1444,8 @@ _processingBecomesStaticImage = true; EnableBehavior = false; var staticImageCanvas = AffiliationArea.RoomInfo.StaticImageCanvas; - var (x, y) = staticImageCanvas.ToImageCanvasPosition(GlobalPosition); - staticImageCanvas.CanvasSprite.DrawActivityObjectInCanvas(this, x, y, () => + var position = staticImageCanvas.ToImageCanvasPosition(GlobalPosition); + staticImageCanvas.CanvasSprite.DrawActivityObjectInCanvas(this, position.X, position.Y, () => { Destroy(); }); diff --git a/DungeonShooting_Godot/src/framework/generator/UiGenerator.cs b/DungeonShooting_Godot/src/framework/generator/UiGenerator.cs index a298096..3bfd712 100644 --- a/DungeonShooting_Godot/src/framework/generator/UiGenerator.cs +++ b/DungeonShooting_Godot/src/framework/generator/UiGenerator.cs @@ -38,7 +38,7 @@ $" \n" + $" }}\n" + $"\n" + - $" public override void OnDisposeUi()\n" + + $" public override void OnDestroyUi()\n" + $" {{\n" + $" \n" + $" }}\n" + diff --git a/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs b/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs index e38b286..a13de3d 100644 --- a/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs +++ b/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs @@ -47,7 +47,16 @@ { var uiName = fileInfo.Name.Substring(0, fileInfo.Name.Length - 5); uiNameClass += $" public const string {uiName} = \"{uiName}\";\n"; + methodClass += $" /// \n" + + $" /// 创建 {uiName}, 并返回UI实例, 该函数不会打开 Ui\n" + + $" /// \n" + + $" public static UI.{uiName}.{uiName}Panel Create_{uiName}()\n" + + $" {{\n" + + $" return CreateUi(UiName.{uiName});\n" + + $" }}\n" + + $"\n" + + $" /// \n" + $" /// 打开 {uiName}, 并返回UI实例\n" + $" /// \n" + $" public static UI.{uiName}.{uiName}Panel Open_{uiName}()\n" + @@ -70,12 +79,12 @@ $" /// \n" + $" /// 销毁 {uiName} 的所有实例\n" + $" /// \n" + - $" public static void Dispose_{uiName}()\n" + + $" public static void Destroy_{uiName}()\n" + $" {{\n" + $" var uiInstance = Get_{uiName}_Instance();\n" + $" foreach (var uiPanel in uiInstance)\n" + $" {{\n" + - $" uiPanel.DisposeUi();\n" + + $" uiPanel.Destroy();\n" + $" }}\n" + $" }}\n" + $"\n" + diff --git a/DungeonShooting_Godot/src/framework/map/image/RoomStaticImageCanvas.cs b/DungeonShooting_Godot/src/framework/map/image/RoomStaticImageCanvas.cs index a21a7c1..75b3da7 100644 --- a/DungeonShooting_Godot/src/framework/map/image/RoomStaticImageCanvas.cs +++ b/DungeonShooting_Godot/src/framework/map/image/RoomStaticImageCanvas.cs @@ -37,5 +37,6 @@ } IsDestroyed = true; + CanvasSprite.Destroy(); } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/ui/UiBase.cs b/DungeonShooting_Godot/src/framework/ui/UiBase.cs index 3a2f1a2..8117a47 100644 --- a/DungeonShooting_Godot/src/framework/ui/UiBase.cs +++ b/DungeonShooting_Godot/src/framework/ui/UiBase.cs @@ -7,7 +7,7 @@ /// Ui 基类 /// [Tool] -public abstract partial class UiBase : Control, ICoroutine +public abstract partial class UiBase : Control, IDestroy, ICoroutine { /// /// 当前 UI 所属层级 @@ -24,11 +24,8 @@ /// 是否已经打开ui /// public bool IsOpen { get; private set; } = false; - - /// - /// 是否已经销毁 - /// - public bool IsDisposed { get; private set; } = false; + + public bool IsDestroyed { get; private set; } /// /// 负责记录上一个Ui @@ -80,7 +77,7 @@ /// /// 销毁当前ui时调用 /// - public virtual void OnDisposeUi() + public virtual void OnDestroyUi() { } @@ -142,17 +139,17 @@ /// /// 关闭并销毁ui /// - public void DisposeUi() + public void Destroy() { - if (IsDisposed) + if (IsDestroyed) { return; } //记录ui关闭 UiManager.RecordUi(this, UiManager.RecordType.Close); HideUi(); - IsDisposed = true; - OnDisposeUi(); + IsDestroyed = true; + OnDestroyUi(); //子Ui调用销毁 if (_nestedUiSet != null) @@ -160,7 +157,7 @@ foreach (var uiBase in _nestedUiSet) { uiBase._targetUi = null; - uiBase.DisposeUi(); + uiBase.Destroy(); } _nestedUiSet.Clear(); } diff --git a/DungeonShooting_Godot/src/framework/ui/UiManager.cs b/DungeonShooting_Godot/src/framework/ui/UiManager.cs index bb14326..cabab04 100644 --- a/DungeonShooting_Godot/src/framework/ui/UiManager.cs +++ b/DungeonShooting_Godot/src/framework/ui/UiManager.cs @@ -153,9 +153,9 @@ /// /// 销毁指定Ui /// - public static void DisposeUi(UiBase uiBase) + public static void DestroyUi(UiBase uiBase) { - uiBase.DisposeUi(); + uiBase.Destroy(); } /// @@ -169,7 +169,7 @@ /// /// 销毁所有Ui /// - public static void DisposeAllUi() + public static void DestroyAllUi() { var map = new Dictionary>(); foreach (var item in _recordUiMap) @@ -181,7 +181,7 @@ { foreach (var uiBase in item.Value) { - uiBase.DisposeUi(); + uiBase.Destroy(); } } } diff --git a/DungeonShooting_Godot/src/game/activity/role/Player.cs b/DungeonShooting_Godot/src/game/activity/role/Player.cs index 27c79bd..7cb4330 100644 --- a/DungeonShooting_Godot/src/game/activity/role/Player.cs +++ b/DungeonShooting_Godot/src/game/activity/role/Player.cs @@ -30,13 +30,6 @@ AttackLayer = PhysicsLayer.Wall | PhysicsLayer.Prop | PhysicsLayer.Enemy; Camp = CampEnum.Camp1; - //让相机跟随玩家 - // var remoteTransform = new RemoteTransform2D(); - // AddChild(remoteTransform); - // MainCamera.Main.GlobalPosition = GlobalPosition; - // MainCamera.Main.ResetSmoothing(); - // remoteTransform.RemotePath = remoteTransform.GetPathTo(MainCamera.Main); - MaxHp = 6; Hp = 6; MaxShield = 0; diff --git a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs index 018ba74..1315af1 100644 --- a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs +++ b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs @@ -22,6 +22,14 @@ } /// + /// 创建 BottomTips, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.BottomTips.BottomTipsPanel Create_BottomTips() + { + return CreateUi(UiName.BottomTips); + } + + /// /// 打开 BottomTips, 并返回UI实例 /// public static UI.BottomTips.BottomTipsPanel Open_BottomTips() @@ -44,12 +52,12 @@ /// /// 销毁 BottomTips 的所有实例 /// - public static void Dispose_BottomTips() + public static void Destroy_BottomTips() { var uiInstance = Get_BottomTips_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -62,6 +70,14 @@ } /// + /// 创建 EditorTips, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.EditorTips.EditorTipsPanel Create_EditorTips() + { + return CreateUi(UiName.EditorTips); + } + + /// /// 打开 EditorTips, 并返回UI实例 /// public static UI.EditorTips.EditorTipsPanel Open_EditorTips() @@ -84,12 +100,12 @@ /// /// 销毁 EditorTips 的所有实例 /// - public static void Dispose_EditorTips() + public static void Destroy_EditorTips() { var uiInstance = Get_EditorTips_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -102,6 +118,14 @@ } /// + /// 创建 EditorTools, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.EditorTools.EditorToolsPanel Create_EditorTools() + { + return CreateUi(UiName.EditorTools); + } + + /// /// 打开 EditorTools, 并返回UI实例 /// public static UI.EditorTools.EditorToolsPanel Open_EditorTools() @@ -124,12 +148,12 @@ /// /// 销毁 EditorTools 的所有实例 /// - public static void Dispose_EditorTools() + public static void Destroy_EditorTools() { var uiInstance = Get_EditorTools_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -142,6 +166,14 @@ } /// + /// 创建 EditorWindow, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.EditorWindow.EditorWindowPanel Create_EditorWindow() + { + return CreateUi(UiName.EditorWindow); + } + + /// /// 打开 EditorWindow, 并返回UI实例 /// public static UI.EditorWindow.EditorWindowPanel Open_EditorWindow() @@ -164,12 +196,12 @@ /// /// 销毁 EditorWindow 的所有实例 /// - public static void Dispose_EditorWindow() + public static void Destroy_EditorWindow() { var uiInstance = Get_EditorWindow_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -182,6 +214,14 @@ } /// + /// 创建 Loading, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.Loading.LoadingPanel Create_Loading() + { + return CreateUi(UiName.Loading); + } + + /// /// 打开 Loading, 并返回UI实例 /// public static UI.Loading.LoadingPanel Open_Loading() @@ -204,12 +244,12 @@ /// /// 销毁 Loading 的所有实例 /// - public static void Dispose_Loading() + public static void Destroy_Loading() { var uiInstance = Get_Loading_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -222,6 +262,14 @@ } /// + /// 创建 Main, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.Main.MainPanel Create_Main() + { + return CreateUi(UiName.Main); + } + + /// /// 打开 Main, 并返回UI实例 /// public static UI.Main.MainPanel Open_Main() @@ -244,12 +292,12 @@ /// /// 销毁 Main 的所有实例 /// - public static void Dispose_Main() + public static void Destroy_Main() { var uiInstance = Get_Main_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -262,6 +310,14 @@ } /// + /// 创建 MapEditor, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.MapEditor.MapEditorPanel Create_MapEditor() + { + return CreateUi(UiName.MapEditor); + } + + /// /// 打开 MapEditor, 并返回UI实例 /// public static UI.MapEditor.MapEditorPanel Open_MapEditor() @@ -284,12 +340,12 @@ /// /// 销毁 MapEditor 的所有实例 /// - public static void Dispose_MapEditor() + public static void Destroy_MapEditor() { var uiInstance = Get_MapEditor_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -302,6 +358,14 @@ } /// + /// 创建 MapEditorCreateGroup, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.MapEditorCreateGroup.MapEditorCreateGroupPanel Create_MapEditorCreateGroup() + { + return CreateUi(UiName.MapEditorCreateGroup); + } + + /// /// 打开 MapEditorCreateGroup, 并返回UI实例 /// public static UI.MapEditorCreateGroup.MapEditorCreateGroupPanel Open_MapEditorCreateGroup() @@ -324,12 +388,12 @@ /// /// 销毁 MapEditorCreateGroup 的所有实例 /// - public static void Dispose_MapEditorCreateGroup() + public static void Destroy_MapEditorCreateGroup() { var uiInstance = Get_MapEditorCreateGroup_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -342,6 +406,14 @@ } /// + /// 创建 MapEditorCreateRoom, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.MapEditorCreateRoom.MapEditorCreateRoomPanel Create_MapEditorCreateRoom() + { + return CreateUi(UiName.MapEditorCreateRoom); + } + + /// /// 打开 MapEditorCreateRoom, 并返回UI实例 /// public static UI.MapEditorCreateRoom.MapEditorCreateRoomPanel Open_MapEditorCreateRoom() @@ -364,12 +436,12 @@ /// /// 销毁 MapEditorCreateRoom 的所有实例 /// - public static void Dispose_MapEditorCreateRoom() + public static void Destroy_MapEditorCreateRoom() { var uiInstance = Get_MapEditorCreateRoom_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -382,6 +454,14 @@ } /// + /// 创建 MapEditorProject, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.MapEditorProject.MapEditorProjectPanel Create_MapEditorProject() + { + return CreateUi(UiName.MapEditorProject); + } + + /// /// 打开 MapEditorProject, 并返回UI实例 /// public static UI.MapEditorProject.MapEditorProjectPanel Open_MapEditorProject() @@ -404,12 +484,12 @@ /// /// 销毁 MapEditorProject 的所有实例 /// - public static void Dispose_MapEditorProject() + public static void Destroy_MapEditorProject() { var uiInstance = Get_MapEditorProject_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -422,6 +502,14 @@ } /// + /// 创建 MapEditorTools, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.MapEditorTools.MapEditorToolsPanel Create_MapEditorTools() + { + return CreateUi(UiName.MapEditorTools); + } + + /// /// 打开 MapEditorTools, 并返回UI实例 /// public static UI.MapEditorTools.MapEditorToolsPanel Open_MapEditorTools() @@ -444,12 +532,12 @@ /// /// 销毁 MapEditorTools 的所有实例 /// - public static void Dispose_MapEditorTools() + public static void Destroy_MapEditorTools() { var uiInstance = Get_MapEditorTools_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -462,6 +550,14 @@ } /// + /// 创建 RoomUI, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.RoomUI.RoomUIPanel Create_RoomUI() + { + return CreateUi(UiName.RoomUI); + } + + /// /// 打开 RoomUI, 并返回UI实例 /// public static UI.RoomUI.RoomUIPanel Open_RoomUI() @@ -484,12 +580,12 @@ /// /// 销毁 RoomUI 的所有实例 /// - public static void Dispose_RoomUI() + public static void Destroy_RoomUI() { var uiInstance = Get_RoomUI_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } @@ -502,6 +598,14 @@ } /// + /// 创建 Settlement, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.Settlement.SettlementPanel Create_Settlement() + { + return CreateUi(UiName.Settlement); + } + + /// /// 打开 Settlement, 并返回UI实例 /// public static UI.Settlement.SettlementPanel Open_Settlement() @@ -524,12 +628,12 @@ /// /// 销毁 Settlement 的所有实例 /// - public static void Dispose_Settlement() + public static void Destroy_Settlement() { var uiInstance = Get_Settlement_Instance(); foreach (var uiPanel in uiInstance) { - uiPanel.DisposeUi(); + uiPanel.Destroy(); } } diff --git a/DungeonShooting_Godot/src/game/room/DungeonManager.cs b/DungeonShooting_Godot/src/game/room/DungeonManager.cs index af629fa..558c020 100644 --- a/DungeonShooting_Godot/src/game/room/DungeonManager.cs +++ b/DungeonShooting_Godot/src/game/room/DungeonManager.cs @@ -169,7 +169,7 @@ IsInDungeon = true; yield return 0; //关闭 loading UI - UiManager.Dispose_Loading(); + UiManager.Destroy_Loading(); if (finish != null) { finish(); @@ -203,7 +203,7 @@ EventManager.EmitEvent(EventEnum.OnExitDungeon); yield return 0; //关闭 loading UI - UiManager.Dispose_Loading(); + UiManager.Destroy_Loading(); if (finish != null) { finish(); diff --git a/DungeonShooting_Godot/src/game/ui/editorWindow/EditorWindowPanel.cs b/DungeonShooting_Godot/src/game/ui/editorWindow/EditorWindowPanel.cs index cf490d3..7d8e3ee 100644 --- a/DungeonShooting_Godot/src/game/ui/editorWindow/EditorWindowPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/editorWindow/EditorWindowPanel.cs @@ -114,6 +114,6 @@ { CloseEvent(); } - DisposeUi(); + Destroy(); } } diff --git a/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs index 4c7e5e0..b886c99 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs @@ -52,7 +52,7 @@ //返回上一个Ui if (PrevUi != null) { - DisposeUi(); + Destroy(); PrevUi.ShowUi(); } } diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProject.cs b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProject.cs index 8b81a97..030eff2 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProject.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProject.cs @@ -23,6 +23,10 @@ { } + public sealed override void OnInitNestedUi() + { + } + /// /// 类型: , 路径: MapEditorProject.Bg.VBoxContainer.Head.Back /// diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs index 6328920..4d80f13 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs @@ -64,7 +64,7 @@ _eventFactory.RemoveAllEventListener(); } - public override void OnDisposeUi() + public override void OnDestroyUi() { _groupGrid.Destroy(); _groupGrid = null;