Unity InventoryScript第49行CS1061错误求助
问题解决:CS1061 'Item' does not contain a definition for 'item'
错误根源
你代码第49行的i.item == item.item尝试访问Item类中名为item的成员,但你的Item类并没有定义这个字段/属性,因此编译器抛出CS1061错误。
解决方案
根据你的Item类设计,选择以下一种修改方式:
方案1:为Item类添加物品标识字段
如果你的Item类还没有区分物品类型的字段,先补充相关成员(比如唯一ID或名称):
// 示例Item类结构(根据实际需求调整) public class Item : MonoBehaviour { public bool stackable; public int quantity; public int itemID; // 新增:区分不同物品类型的唯一ID // 也可用字符串名称:public string itemName; }
然后修改第49行的判断逻辑:
// 用itemID比较 if (i.itemID == item.itemID) // 或用itemName比较 // if (i.itemName == item.itemName)
方案2:如果Item是ScriptableObject类型(推荐的物品数据管理方式)
若你的Item是ScriptableObject(用于存储物品模板数据),直接比较实例引用即可(同类型物品对应同一个ScriptableObject实例):
if (i == item)
注意:使用ScriptableObject时不要直接修改其quantity字段(所有引用该SO的对象会共享数据),建议用包装类存储库存物品数据:
// 新增InventoryItem包装类 public class InventoryItem { public Item itemData; // 引用ScriptableObject物品模板 public int quantity; // 当前库存中的数量 }
再修改InventoryScript相关代码:
// 替换原List<Item> public List<InventoryItem> items = new List<InventoryItem>(); public bool AddItem(Item itemData, int quantity = 1) { if (itemData.stackable) { foreach (var invItem in items) { if (invItem.itemData == itemData) { invItem.quantity += quantity; return true; } } } if (items.Count < maxInventorySize) { items.Add(new InventoryItem { itemData = itemData, quantity = quantity }); return true; } return false; }
方案3:直接比较物品的唯一特征
如果Item类有其他可区分类型的唯一属性(比如物品预制体引用),也可用该属性比较:
if (i.prefab == item.prefab)
内容的提问来源于stack exchange,提问作者Vladi
相关产品推荐
相关产品推荐

