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