diff --git a/Assets/ModuleCore/ModuleUIControl.meta b/Assets/ModuleCore/ModuleUIControl.meta
new file mode 100644
index 0000000..83e71cc
--- /dev/null
+++ b/Assets/ModuleCore/ModuleUIControl.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8b26950e50e4e4647a4d48ba0fde3f70
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleUIControl/ModuleUIControl.cs b/Assets/ModuleCore/ModuleUIControl/ModuleUIControl.cs
new file mode 100644
index 0000000..3da2fc2
--- /dev/null
+++ b/Assets/ModuleCore/ModuleUIControl/ModuleUIControl.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+
+///
+/// UI控件
+///
+public class ModuleUIControl {
+ /// 核心模块
+ protected virtual ModuleCore ModuleCore => ModuleCore.I;
+ /// 绑定的元素
+ public readonly VisualElement element;
+ /// UI控件
+ public ModuleUIControl(VisualElement element) => this.element = element;
+}
diff --git a/Assets/ModuleCore/ModuleUIControl/ModuleUIControl.cs.meta b/Assets/ModuleCore/ModuleUIControl/ModuleUIControl.cs.meta
new file mode 100644
index 0000000..e3015fd
--- /dev/null
+++ b/Assets/ModuleCore/ModuleUIControl/ModuleUIControl.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c0c97a0c4b232fb4595b8eaafc961a9c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleUIItem.meta b/Assets/ModuleCore/ModuleUIItem.meta
new file mode 100644
index 0000000..82f700b
--- /dev/null
+++ b/Assets/ModuleCore/ModuleUIItem.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b12984c5e1e0c2848a7a6b14061f8858
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleUIItem/ModuleUIItem.cs b/Assets/ModuleCore/ModuleUIItem/ModuleUIItem.cs
new file mode 100644
index 0000000..f26dc49
--- /dev/null
+++ b/Assets/ModuleCore/ModuleUIItem/ModuleUIItem.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+
+///
+/// UI项
+///
+public abstract class ModuleUIItem : ModuleUIControl {
+ /// 选择事件
+ public static event Action OnSelect;
+ /// 触发事件
+ public static void Select(Data data) => OnSelect?.Invoke(data);
+ /// 绑定的数据
+ public readonly Data value;
+ /// UI项
+ public ModuleUIItem(Data value, VisualElement element) : base(element) {
+ this.value = value;
+ OnSelect += UnitUIPanelItem_OnSelect;
+ }
+ /// 触发选择事件
+ public virtual void Select() => OnSelect?.Invoke(value);
+ /// 侦听选择事件
+ public virtual void UnitUIPanelItem_OnSelect(Data obj) {
+ if (value.Equals(obj)) { SelectState(); }
+ else { DefaultState(); }
+ }
+ /// 默认状态
+ public virtual void DefaultState() { }
+ /// 选中状态
+ public virtual void SelectState() { }
+ /// 释放
+ public virtual void Release() => OnSelect -= UnitUIPanelItem_OnSelect;
+}
diff --git a/Assets/ModuleCore/ModuleUIItem/ModuleUIItem.cs.meta b/Assets/ModuleCore/ModuleUIItem/ModuleUIItem.cs.meta
new file mode 100644
index 0000000..7be85e5
--- /dev/null
+++ b/Assets/ModuleCore/ModuleUIItem/ModuleUIItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 58b0a0e9216e0b04eaedf110eeab367e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: