You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:52:42