From 5d8f76b3e6decb8ae13b0f8b60165886ddd18c24 Mon Sep 17 00:00:00 2001
From: MuHua-123 <136542559+MuHua-123@users.noreply.github.com>
Date: Wed, 17 Sep 2025 17:44:00 +0800
Subject: [PATCH] =?UTF-8?q?=E6=90=AD=E5=BB=BA=E6=A1=86=E6=9E=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Assets/AssetsPackage/物品数据.meta | 8 ++
Assets/ModuleCore/ModuleItem.meta | 8 ++
Assets/ModuleCore/ModuleItem/DataItem.meta | 8 ++
.../ModuleItem/DataItem/DataItem.cs | 16 ++++
.../ModuleItem/DataItem/DataItem.cs.meta | 11 +++
Assets/ModuleCore/ModuleItem/Inventory.cs | 76 +++++++++++++++++++
.../ModuleCore/ModuleItem/Inventory.cs.meta | 11 +++
Assets/ModuleCore/ModuleItem/ModuleConst.meta | 8 ++
.../ModuleItem/ModuleConst/ConstItem.cs | 18 +++++
.../ModuleItem/ModuleConst/ConstItem.cs.meta | 11 +++
README.md | 7 ++
11 files changed, 182 insertions(+)
create mode 100644 Assets/AssetsPackage/物品数据.meta
create mode 100644 Assets/ModuleCore/ModuleItem.meta
create mode 100644 Assets/ModuleCore/ModuleItem/DataItem.meta
create mode 100644 Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs
create mode 100644 Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs.meta
create mode 100644 Assets/ModuleCore/ModuleItem/Inventory.cs
create mode 100644 Assets/ModuleCore/ModuleItem/Inventory.cs.meta
create mode 100644 Assets/ModuleCore/ModuleItem/ModuleConst.meta
create mode 100644 Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs
create mode 100644 Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs.meta
diff --git a/Assets/AssetsPackage/物品数据.meta b/Assets/AssetsPackage/物品数据.meta
new file mode 100644
index 0000000..72223a3
--- /dev/null
+++ b/Assets/AssetsPackage/物品数据.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c3fd76fa2f8dd174cbb580a5890fd90d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleItem.meta b/Assets/ModuleCore/ModuleItem.meta
new file mode 100644
index 0000000..19a36b8
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d3a7044b333aacb4286fef636118cfec
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleItem/DataItem.meta b/Assets/ModuleCore/ModuleItem/DataItem.meta
new file mode 100644
index 0000000..2f78985
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/DataItem.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8a4ee71d02fa8cd40aceb7f62a6efd89
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs b/Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs
new file mode 100644
index 0000000..4cc6cb0
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 物品
+///
+public class DataItem {
+ /// 名字
+ public string name;
+ /// 图片
+ public Sprite sprite;
+
+ /// 堆叠数量
+ public virtual int MaxStack => 999;
+}
diff --git a/Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs.meta b/Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs.meta
new file mode 100644
index 0000000..b8fd318
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/DataItem/DataItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 427a33328910b764b9014f337267f950
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleItem/Inventory.cs b/Assets/ModuleCore/ModuleItem/Inventory.cs
new file mode 100644
index 0000000..bdbd73a
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/Inventory.cs
@@ -0,0 +1,76 @@
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 物品库存
+///
+public class Inventory {
+ /// 插槽列表
+ public List slots = new List();
+
+ /// 添加物品
+ public void AddItem(InventorySlot slot) {
+ if (MergeToSlots(slot)) { return; }
+ // 如果还有剩余,按照MaxStack分批放入空位
+ while (slot.count > 0) { slot.count = AddToSlots(slot); }
+ }
+ /// 添加到插槽
+ public int AddToSlots(InventorySlot slot) {
+ InventorySlot emptySlot = slots.FirstOrDefault(s => s.item == null);
+ if (emptySlot == null) { Debug.Log("库存没有空位了!"); return 0; }
+ // 填充插槽
+ int addCount = Mathf.Min(slot.count, slot.MaxStack);
+ emptySlot.Settings(slot.item, addCount);
+ // 计算余量
+ return slot.count - addCount;
+ }
+ /// 合并到插槽
+ public bool MergeToSlots(InventorySlot slot) {
+ int remain = slot.count;
+ // 查询所有可合并的插槽
+ var sameSlots = slots.Where(slot => slot.Merge(slot)).ToList();
+ // 合并到已有插槽
+ sameSlots.ForEach(obj => MergeToSlots(obj, ref remain));
+ slot.count = remain;
+ return remain == 0;
+ }
+ /// 合并到插槽
+ public void MergeToSlots(InventorySlot slot, ref int remain) {
+ int canAdd = slot.MaxStack - slot.count;
+ int add = Mathf.Min(canAdd, remain);
+ slot.count += add;
+ remain -= add;
+ }
+}
+///
+/// 库存插槽
+///
+public class InventorySlot {
+ /// 数量
+ public int count;
+ /// 物品
+ public DataItem item;
+
+ /// 堆叠数量
+ public virtual int MaxStack => item != null ? item.MaxStack : 0;
+
+ public InventorySlot() { }
+
+ public InventorySlot(DataItem item, int count) {
+ this.item = item;
+ this.count = count;
+ }
+ public void Settings(DataItem item, int count) {
+ this.item = item;
+ this.count = count;
+ }
+
+ /// 是否允许合并
+ public bool Merge(InventorySlot slot) {
+ if (item == null || slot == null || slot.item == null) { return false; }
+ if (count >= item.MaxStack) { return false; }
+ return slot.item.name == item.name;
+ }
+}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleItem/Inventory.cs.meta b/Assets/ModuleCore/ModuleItem/Inventory.cs.meta
new file mode 100644
index 0000000..d211269
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/Inventory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 299fd3a7463d8ef46ab2221eca3eeae7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleItem/ModuleConst.meta b/Assets/ModuleCore/ModuleItem/ModuleConst.meta
new file mode 100644
index 0000000..f0a87f5
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/ModuleConst.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9871787cca5a9e54fab450c7d3674d69
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs b/Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs
new file mode 100644
index 0000000..9a7dc44
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 物品 - 常量
+///
+[CreateAssetMenu(menuName = "MuHua/物品系统/物品")]
+public class ConstItem : ScriptableObject {
+ /// 图片
+ public Sprite sprite;
+
+ /// 数据转换
+ public DataItem To() {
+ DataItem item = new DataItem { name = name, sprite = sprite };
+ return item;
+ }
+}
diff --git a/Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs.meta b/Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs.meta
new file mode 100644
index 0000000..0c7d56f
--- /dev/null
+++ b/Assets/ModuleCore/ModuleItem/ModuleConst/ConstItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 66da6092ac51f6a47a0c3d896f845816
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/README.md b/README.md
index 15ee5e6..2121dba 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,10 @@
## UIToolkit工具包
* https://github.com/MuHua-123/MuHua-UIElements.git?path=Packages/UITool
+
+## 待完成事项
+
+- 物品系统
+- 装备系统
+- 奖励系统
+- 交易系统
\ No newline at end of file