Unity 2021.3.13f1库存系统代码报错修复求助
Unity库存系统编译错误修复
错误详情
- 错误1:
Assets\Scripts\InventoryScripts\InventorySystem.cs(31,33): error CS1579: foreach语句无法操作InventorySlot类型变量,因为该类型未包含GetEnumerator的公共实例或扩展定义
- 错误2:
Assets\Scripts\InventoryScripts\InventorySystem.cs(55,19): error CS0029: 无法将类型'System.Collections.Generic.List
'隐式转换为'InventorySlot'
修复方案
错误2修复(类型不匹配)
ContainsItem方法中,Where查询返回的是符合条件的槽位列表,但方法输出参数要求单个InventorySlot实例。将ToList()替换为FirstOrDefault(),直接获取第一个匹配的槽位,即可解决类型不匹配问题。
错误1修复(foreach遍历错误)
AddToInventory方法中,invSlot是单个InventorySlot实例,不能用foreach遍历。直接检查该槽位是否有剩余堆叠空间,执行添加逻辑即可。
修复后的InventorySystem代码
using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Events; [System.Serializable] public class InventorySystem { [SerializeField] private List<InventorySlot> inventorySlots; public int InventorySize => InventorySlots.Count; public List<InventorySlot> InventorySlots => inventorySlots; public UnityAction<InventorySlot> OnInventorySlotChanged; public InventorySystem(int size) { inventorySlots = new List<InventorySlot>(size); for(int i = 0; i < size; i++) { inventorySlots.Add(new InventorySlot()); } } public bool AddToInventory(InventoryItemData itemToAdd, int amountToAdd) { if(ContainsItem(itemToAdd, out InventorySlot invSlot)) { // 直接检查单个槽位的剩余堆叠空间 if(invSlot.RoomLeftInStack(amountToAdd)) { invSlot.AddToStack(amountToAdd); OnInventorySlotChanged?.Invoke(invSlot); return true; } } if(HasFreeSlot(out InventorySlot freeSlot)) { freeSlot.UpdateInvSlot(itemToAdd, amountToAdd); OnInventorySlotChanged?.Invoke(freeSlot); return true; } return false; } public bool ContainsItem(InventoryItemData itemToAdd, out InventorySlot invSlot) { // 获取第一个匹配的物品槽位,替代列表返回 invSlot = InventorySlots.FirstOrDefault(i => i.ItemData == itemToAdd); return invSlot != null; } public bool HasFreeSlot(out InventorySlot freeSlot) { freeSlot = InventorySlots.FirstOrDefault(i => i.ItemData == null); return freeSlot != null; } }
其他脚本说明
InventoryHolder和InventorySlot脚本无需修改,保持原代码即可正常配合使用。
内容的提问来源于stack exchange,提问作者MyNameIsToday
相关产品推荐
相关产品推荐

