diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst.meta b/Assets/AssetsEquipment.meta
similarity index 77%
rename from Assets/ModuleCore/ModuleAttribute/ModuleConst.meta
rename to Assets/AssetsEquipment.meta
index 5e5c914..7f15c84 100644
--- a/Assets/ModuleCore/ModuleAttribute/ModuleConst.meta
+++ b/Assets/AssetsEquipment.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 01e61c86999f6aa40aa7742bb891014e
+guid: ca01e5dfb1bcb40409d89324b7b30e0c
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst.meta b/Assets/AssetsEquipment/ScriptableObject.meta
similarity index 77%
rename from Assets/ModuleCore/ModuleInventory/ModuleConst.meta
rename to Assets/AssetsEquipment/ScriptableObject.meta
index b803457..e9d5387 100644
--- a/Assets/ModuleCore/ModuleInventory/ModuleConst.meta
+++ b/Assets/AssetsEquipment/ScriptableObject.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 48193b9c6d7c6af4088a00876ccaa1c3
+guid: 6c3f4d86bebc21a459dcdb9549d00c17
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/AssetsPackage/物品数据/护甲.meta b/Assets/AssetsEquipment/ScriptableObject/护甲.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲.meta
rename to Assets/AssetsEquipment/ScriptableObject/护甲.meta
diff --git a/Assets/ModuleCore/ModuleFormula/ModuleConst.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/上衣.meta
similarity index 77%
rename from Assets/ModuleCore/ModuleFormula/ModuleConst.meta
rename to Assets/AssetsEquipment/ScriptableObject/护甲/上衣.meta
index f0a87f5..07eaf18 100644
--- a/Assets/ModuleCore/ModuleFormula/ModuleConst.meta
+++ b/Assets/AssetsEquipment/ScriptableObject/护甲/上衣.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 9871787cca5a9e54fab450c7d3674d69
+guid: 50ec3141d8da2214eacd8fcf7ea8428b
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/AssetsPackage/物品数据/护甲/上衣.asset b/Assets/AssetsEquipment/ScriptableObject/护甲/上衣/上衣.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/上衣.asset
rename to Assets/AssetsEquipment/ScriptableObject/护甲/上衣/上衣.asset
diff --git a/Assets/AssetsPackage/物品数据/护甲/上衣.asset.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/上衣/上衣.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/上衣.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/护甲/上衣/上衣.asset.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/护甲/头盔.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/头盔.meta
new file mode 100644
index 0000000..6372512
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/护甲/头盔.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7f7ce98abf5cf1242bcaf87f8e07e3f9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/护甲/头盔.asset b/Assets/AssetsEquipment/ScriptableObject/护甲/头盔/头盔.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/头盔.asset
rename to Assets/AssetsEquipment/ScriptableObject/护甲/头盔/头盔.asset
diff --git a/Assets/AssetsPackage/物品数据/护甲/头盔.asset.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/头盔/头盔.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/头盔.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/护甲/头盔/头盔.asset.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/护甲/手套.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/手套.meta
new file mode 100644
index 0000000..c0930b6
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/护甲/手套.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fd9b18780ad93c44dbede85c81c63d25
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/护甲/手套.asset b/Assets/AssetsEquipment/ScriptableObject/护甲/手套/手套.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/手套.asset
rename to Assets/AssetsEquipment/ScriptableObject/护甲/手套/手套.asset
diff --git a/Assets/AssetsPackage/物品数据/护甲/手套.asset.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/手套/手套.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/手套.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/护甲/手套/手套.asset.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/护甲/腰带.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/腰带.meta
new file mode 100644
index 0000000..4bcebaa
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/护甲/腰带.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 66704a169cf4fd94cb18d2c1d132173a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/护甲/腰带.asset b/Assets/AssetsEquipment/ScriptableObject/护甲/腰带/腰带.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/腰带.asset
rename to Assets/AssetsEquipment/ScriptableObject/护甲/腰带/腰带.asset
diff --git a/Assets/AssetsPackage/物品数据/护甲/腰带.asset.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/腰带/腰带.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/腰带.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/护甲/腰带/腰带.asset.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/护甲/鞋子.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/鞋子.meta
new file mode 100644
index 0000000..4c2a660
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/护甲/鞋子.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f79ff4ff8b66add4a8beda06e918ea16
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/护甲/鞋子.asset b/Assets/AssetsEquipment/ScriptableObject/护甲/鞋子/鞋子.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/鞋子.asset
rename to Assets/AssetsEquipment/ScriptableObject/护甲/鞋子/鞋子.asset
diff --git a/Assets/AssetsPackage/物品数据/护甲/鞋子.asset.meta b/Assets/AssetsEquipment/ScriptableObject/护甲/鞋子/鞋子.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/护甲/鞋子.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/护甲/鞋子/鞋子.asset.meta
diff --git a/Assets/AssetsPackage/物品数据/武器.meta b/Assets/AssetsEquipment/ScriptableObject/武器.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/武器.meta
rename to Assets/AssetsEquipment/ScriptableObject/武器.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/武器/副手.meta b/Assets/AssetsEquipment/ScriptableObject/武器/副手.meta
new file mode 100644
index 0000000..df371a4
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/武器/副手.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d59370b1224756a48aae056eac6abc05
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/武器/盾牌.asset b/Assets/AssetsEquipment/ScriptableObject/武器/副手/盾牌.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/武器/盾牌.asset
rename to Assets/AssetsEquipment/ScriptableObject/武器/副手/盾牌.asset
diff --git a/Assets/AssetsPackage/物品数据/武器/盾牌.asset.meta b/Assets/AssetsEquipment/ScriptableObject/武器/副手/盾牌.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/武器/盾牌.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/武器/副手/盾牌.asset.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/武器/单手.meta b/Assets/AssetsEquipment/ScriptableObject/武器/单手.meta
new file mode 100644
index 0000000..62719a4
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/武器/单手.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3196c223cc5a7014f8504b1056eb06b9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 1.asset b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 1.asset
new file mode 100644
index 0000000..bf5fa19
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 1.asset
@@ -0,0 +1,16 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 45818eb64c9b04441b20b29f0230edb7, type: 3}
+ m_Name: "\u5355\u624B\u5251 1"
+ m_EditorClassIdentifier:
+ sprite: {fileID: 21300000, guid: 5fd50594014b70e48bd6993443d46b32, type: 3}
+ type: 0
diff --git a/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 1.asset.meta b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 1.asset.meta
new file mode 100644
index 0000000..eb6c5c2
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 1.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d1ab7394c601aff4797e854bd7be57f5
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 2.asset b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 2.asset
new file mode 100644
index 0000000..d456b38
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 2.asset
@@ -0,0 +1,16 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 45818eb64c9b04441b20b29f0230edb7, type: 3}
+ m_Name: "\u5355\u624B\u5251 2"
+ m_EditorClassIdentifier:
+ sprite: {fileID: 21300000, guid: 5fd50594014b70e48bd6993443d46b32, type: 3}
+ type: 0
diff --git a/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 2.asset.meta b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 2.asset.meta
new file mode 100644
index 0000000..13f7f0c
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑 2.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2155d31e917f2eb45a9f62174a1698ea
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/武器/单手剑.asset b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/武器/单手剑.asset
rename to Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑.asset
diff --git a/Assets/AssetsPackage/物品数据/武器/单手剑.asset.meta b/Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/武器/单手剑.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/武器/单手/单手剑.asset.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/武器/双手.meta b/Assets/AssetsEquipment/ScriptableObject/武器/双手.meta
new file mode 100644
index 0000000..251858c
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/武器/双手.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 99034827463076243a095d6e0719166c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/武器/弓.asset b/Assets/AssetsEquipment/ScriptableObject/武器/双手/弓.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/武器/弓.asset
rename to Assets/AssetsEquipment/ScriptableObject/武器/双手/弓.asset
diff --git a/Assets/AssetsPackage/物品数据/武器/弓.asset.meta b/Assets/AssetsEquipment/ScriptableObject/武器/双手/弓.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/武器/弓.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/武器/双手/弓.asset.meta
diff --git a/Assets/AssetsPackage/物品数据/饰品.meta b/Assets/AssetsEquipment/ScriptableObject/饰品.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/饰品.meta
rename to Assets/AssetsEquipment/ScriptableObject/饰品.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/饰品/戒指.meta b/Assets/AssetsEquipment/ScriptableObject/饰品/戒指.meta
new file mode 100644
index 0000000..02c79fc
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/饰品/戒指.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0f196c0732ec0114cb37de3ec74740d9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/饰品/戒指.asset b/Assets/AssetsEquipment/ScriptableObject/饰品/戒指/戒指.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/饰品/戒指.asset
rename to Assets/AssetsEquipment/ScriptableObject/饰品/戒指/戒指.asset
diff --git a/Assets/AssetsPackage/物品数据/饰品/戒指.asset.meta b/Assets/AssetsEquipment/ScriptableObject/饰品/戒指/戒指.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/饰品/戒指.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/饰品/戒指/戒指.asset.meta
diff --git a/Assets/AssetsEquipment/ScriptableObject/饰品/手镯.meta b/Assets/AssetsEquipment/ScriptableObject/饰品/手镯.meta
new file mode 100644
index 0000000..8e931f3
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/饰品/手镯.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 76925090c35dc5c4ca26c94995c00e71
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsEquipment/ScriptableObject/饰品/项链.meta b/Assets/AssetsEquipment/ScriptableObject/饰品/项链.meta
new file mode 100644
index 0000000..ecba802
--- /dev/null
+++ b/Assets/AssetsEquipment/ScriptableObject/饰品/项链.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7854296aa2daf7d45a34980e33061b75
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/AssetsPackage/物品数据/饰品/项链.asset b/Assets/AssetsEquipment/ScriptableObject/饰品/项链/项链.asset
similarity index 100%
rename from Assets/AssetsPackage/物品数据/饰品/项链.asset
rename to Assets/AssetsEquipment/ScriptableObject/饰品/项链/项链.asset
diff --git a/Assets/AssetsPackage/物品数据/饰品/项链.asset.meta b/Assets/AssetsEquipment/ScriptableObject/饰品/项链/项链.asset.meta
similarity index 100%
rename from Assets/AssetsPackage/物品数据/饰品/项链.asset.meta
rename to Assets/AssetsEquipment/ScriptableObject/饰品/项链/项链.asset.meta
diff --git a/Assets/AssetsPackage/物品数据/属性容器.asset b/Assets/AssetsPackage/物品数据/属性容器.asset
index c5ba3ae..5289e0a 100644
--- a/Assets/AssetsPackage/物品数据/属性容器.asset
+++ b/Assets/AssetsPackage/物品数据/属性容器.asset
@@ -15,7 +15,7 @@ MonoBehaviour:
type: 0
defaultValue: 0
minValue: 0
- maxValue: 3.4028235e+38
+ maxValue: 9999
container: {fileID: 11400000}
--- !u!114 &-1377547097575584075
MonoBehaviour:
@@ -32,7 +32,7 @@ MonoBehaviour:
type: 0
defaultValue: 0
minValue: 0
- maxValue: 3.4028235e+38
+ maxValue: 9999
container: {fileID: 11400000}
--- !u!114 &11400000
MonoBehaviour:
diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor.meta b/Assets/ModuleCore/ModuleAttribute/Editor.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor.meta
rename to Assets/ModuleCore/ModuleAttribute/Editor.meta
diff --git a/Assets/ModuleCore/ModuleAttribute/Editor/AttributeContainerConstEditor.cs b/Assets/ModuleCore/ModuleAttribute/Editor/AttributeContainerConstEditor.cs
new file mode 100644
index 0000000..d8052a1
--- /dev/null
+++ b/Assets/ModuleCore/ModuleAttribute/Editor/AttributeContainerConstEditor.cs
@@ -0,0 +1,56 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEngine.UIElements;
+
+namespace MuHuaEditor {
+ ///
+ /// 属性容器 - 自定义编辑器
+ ///
+ [CustomEditor(typeof(AttributeContainerConst))]
+ public class AttributeContainerConstEditor : ModuleUIEditor {
+
+ public VisualTreeAsset AttributeTemplate = default;
+
+ private UIAttributeList attributeList;
+
+ public VisualElement AttributeList => Q("AttributeList");
+
+ public override void Initial() {
+ attributeList = new UIAttributeList(AttributeList, AttributeTemplate);
+ attributeList.Initial(value.instances);
+ AddControl(attributeList);
+ }
+
+
+ // public override void OnInspectorGUI() {
+ // base.OnInspectorGUI();
+ // if (GUILayout.Button("创建属性")) { GenerateAttribute(); }
+ // if (GUILayout.Button("删除属性")) { DeleteInstance(); }
+ // }
+
+ /// 创建属性实例
+ // private void GenerateAttribute() {
+ // AttributeInstanceConst instance = CreateInstance();
+ // instance.container = container;
+ // // 加入容器
+ // container.instances.Add(instance);
+ // AssetDatabase.AddObjectToAsset(instance, container);
+ // EditorUtility.SetDirty(instance);
+ // EditorUtility.SetDirty(container);
+ // AssetDatabase.SaveAssets();
+ // }
+ /// 删除全部实例
+ // private void DeleteInstance() {
+ // for (int i = container.instances.Count; i-- > 0;) {
+ // AttributeInstanceConst instance = container.instances[i];
+ // container.instances.Remove(instance);
+ // Undo.DestroyObjectImmediate(instance);
+ // }
+ // EditorUtility.SetDirty(container);
+ // AssetDatabase.SaveAssets();
+ // }
+
+ }
+}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleAttribute/Editor/AttributeContainerConstEditor.cs.meta b/Assets/ModuleCore/ModuleAttribute/Editor/AttributeContainerConstEditor.cs.meta
new file mode 100644
index 0000000..7a98cb0
--- /dev/null
+++ b/Assets/ModuleCore/ModuleAttribute/Editor/AttributeContainerConstEditor.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: d8ae6bbae674e19448216fd6b41cd012
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences:
+ - VisualTreeAsset: {fileID: 9197481963319205126, guid: 95527f76fc8930d4ab47213114a5952b, type: 3}
+ - AttributeTemplate: {fileID: 9197481963319205126, guid: 1749a10e5ffdea045b442dfa323e4028, type: 3}
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleAttribute/Editor/AttributeInstanceConstEditor.cs b/Assets/ModuleCore/ModuleAttribute/Editor/AttributeInstanceConstEditor.cs
new file mode 100644
index 0000000..84248b2
--- /dev/null
+++ b/Assets/ModuleCore/ModuleAttribute/Editor/AttributeInstanceConstEditor.cs
@@ -0,0 +1,46 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace MuHuaEditor {
+ ///
+ /// 属性实例 - 自定义编辑器
+ ///
+ [CustomEditor(typeof(AttributeInstanceConst))]
+ public class AttributeInstanceConstEditor : Editor {
+
+ private AttributeInstanceConst instance;
+
+ private void Awake() => instance = target as AttributeInstanceConst;
+
+ public override void OnInspectorGUI() {
+ base.OnInspectorGUI();
+ if (instance.container == null) { return; }
+ EditorGUILayout.Space(20);
+
+ // 输入字段修改 name
+ EditorGUI.BeginChangeCheck();
+ string newName = EditorGUILayout.TextField("属性名称", instance.name);
+ if (EditorGUI.EndChangeCheck()) { ModifyName(newName); }
+ // 按钮功能
+ if (GUILayout.Button("删除属性")) { DeleteInstance(); }
+ }
+
+ /// 修改名字
+ private void ModifyName(string newName) {
+ instance.name = newName;
+ Undo.RecordObject(instance, "修改属性名称");
+ EditorUtility.SetDirty(instance);
+ AssetDatabase.SaveAssets();
+ }
+ /// 删除实例
+ private void DeleteInstance() {
+ AttributeContainerConst container = instance.container;
+ container.instances.Remove(instance);
+ EditorUtility.SetDirty(container);
+ Undo.DestroyObjectImmediate(instance);
+ AssetDatabase.SaveAssets();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs.meta b/Assets/ModuleCore/ModuleAttribute/Editor/AttributeInstanceConstEditor.cs.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs.meta
rename to Assets/ModuleCore/ModuleAttribute/Editor/AttributeInstanceConstEditor.cs.meta
diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel.meta b/Assets/ModuleCore/ModuleAttribute/Editor/ModuleUIPanel.meta
similarity index 77%
rename from Assets/ModuleCore/ModuleEquipment/ModuleUIPanel.meta
rename to Assets/ModuleCore/ModuleAttribute/Editor/ModuleUIPanel.meta
index a00ce3d..dca33fe 100644
--- a/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel.meta
+++ b/Assets/ModuleCore/ModuleAttribute/Editor/ModuleUIPanel.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: ce2626e82921eb14992661fc763dc7b5
+guid: dbe28b450df84584cb523a09c813e59b
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/ModuleCore/ModuleAttribute/Editor/ModuleUIPanel/UIAttributeList.cs b/Assets/ModuleCore/ModuleAttribute/Editor/ModuleUIPanel/UIAttributeList.cs
new file mode 100644
index 0000000..39f27cb
--- /dev/null
+++ b/Assets/ModuleCore/ModuleAttribute/Editor/ModuleUIPanel/UIAttributeList.cs
@@ -0,0 +1,126 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+using MuHua;
+
+namespace MuHuaEditor {
+ ///
+ /// 属性 - UI列表
+ ///
+ public class UIAttributeList : ModuleUIPanel, UIControl {
+ /// 拖拽预览
+ public VisualElement preview;
+ /// 鼠标位置
+ public Vector2 mousePosition;
+ /// 偏移位置
+ public Vector2 offsetPosition;
+ /// 项目列表
+ public ModuleUIItems items;
+
+ public UIAttributeList(VisualElement element, VisualTreeAsset templateAsset) : base(element) {
+ items = new ModuleUIItems(element, templateAsset,
+ (data, element) => new UIItem(data, element, this));
+
+ element.RegisterCallback(FloatingFunc);
+ }
+ private void FloatingFunc(MouseMoveEvent evt) {
+ mousePosition = evt.mousePosition;
+ }
+
+ public void Update() {
+ if (preview == null) { return; }
+ preview.transform.position = mousePosition - offsetPosition;
+ }
+
+ public void Dispose() => items.Release();
+
+ /// 初始化
+ public void Initial(List list) {
+ items.Create(list);
+ }
+ /// 设置值
+ // public void Settings(T value) => callback?.Invoke(value);
+
+ public void MouseDownEvent(VisualElement element) {
+ preview = element;
+ offsetPosition = mousePosition;
+ // Debug.Log($"{preview.worldBound.position} - {mousePosition}");
+ // offsetPosition = preview.worldBound.position - mousePosition;
+ // Debug.Log($"{preview.worldBound.position} = {mousePosition} + {offsetPosition}");
+ }
+ public void MouseUpEvent() {
+ if (preview == null) { return; }
+ preview.transform.position = Vector2.zero;
+
+ int insertIndex = GetInsertIndex(element, preview);
+ int oldIndex = element.IndexOf(preview);
+
+ // 修正插入索引
+ // if (insertIndex > oldIndex) insertIndex--;
+ Debug.Log($"插入位置 {insertIndex} - 旧位置 {oldIndex}");
+ // 重新排序UI和数据
+ if (oldIndex != insertIndex) { MovePreviewElement(oldIndex, insertIndex); }
+ preview = null;
+ }
+
+ ///
+ /// 获取插入索引
+ ///
+ private int GetInsertIndex(VisualElement parent, VisualElement preview) {
+ Vector2 previewCenter = preview.worldBound.center;
+ int insertIndex = 0;
+ for (int i = 0; i < parent.childCount; i++) {
+ var child = parent[i];
+ if (child == preview) continue;
+ if (previewCenter.y < child.worldBound.center.y) {
+ insertIndex = i;
+ break;
+ }
+ insertIndex = i + 1;
+ }
+ return insertIndex;
+ }
+
+ ///
+ /// 移动预览元素到新位置
+ ///
+ private void MovePreviewElement(int oldIndex, int newIndex) {
+ VisualElement temp = element[oldIndex];
+ // element.RemoveAt(oldIndex);
+ element.Insert(newIndex, temp);
+ }
+
+ /// UI项
+ public class UIItem : ModuleUIItem {
+ public readonly UIAttributeList parent;
+
+ public Label Range => Q