You need to enable JavaScript to run this app. C# Unity游戏库存售卖时误删全部物品,如何实现单次仅删1个
优惠活动
大模型
产品
解决方案
定价
更多

C# Unity游戏库存售卖时误删全部物品,如何实现单次仅删1个

库存移除逻辑异常排查与修复方案

核心异常特征匹配

你遇到的“库存为1时移除正常、多数量时一次全删”的表现,是典型的参数传递或扣减逻辑分支错误问题,和拾取、UI槽位渲染逻辑无关,按以下优先级排查即可定位问题。

常见根本成因(按出现概率排序)

  • 移除操作的传参错误(占90%以上同类问题)
    触发售卖/移除时,接口收到的移除数量不是固定值1,而是当前物品的实际库存总数。常见错误场景:
    • ItemSlotUI代码中绑定点击事件时,误把槽位的当前堆叠数量作为参数传给RemoveFromInventory,而非固定写死扣减1个
    • 在Unity Inspector面板给按钮绑定时,错误把动态变化的堆叠数值设为事件传入参数,而非手动输入固定值1
      这类错误完全匹配你的现象:库存为1时传参为1,扣减1个到0,结果符合预期;库存为15时传参为15,直接扣完全部数量。
  • RemoveFromInventory核心逻辑错误
    常见错误写法:跳过数量扣减步骤,只要触发移除就直接从字典中删除整个物品条目,比如:
    // 错误实现示例
    public void RemoveFromInventory(Item item, int removeAmount = 1)
    {
        if (inventory.ContainsKey(item))
        {
            inventory.Remove(item); // 不做扣减直接删条目
            onInventoryChange?.Invoke();
        }
    }
    
    这种写法下,库存为1时删除条目刚好是预期的“扣1到0”,但库存为15时就会直接清空全部数量。
  • 字典Key匹配异常
    如果你使用的Item是自定义普通C#类而非ScriptableObject,没有重写Equals和GetHashCode时会出现Key匹配错位。但根据你能正常累加物品数量的表现,这类问题概率极低,仅在每次拾取时动态生成新Item实例的场景下才会出现。

可落地修复方案

  • 第一步:修正传参逻辑
    1. 检查所有调用RemoveFromInventory的代码位置,确保移除操作传入的扣减值为固定1,而非当前物品的堆叠总数
    2. 检查Unity Inspector面板中所有绑定移除/售卖按钮的事件配置,确认传入的移除数量参数是手动输入的固定值1,不要绑定动态变化的槽位数值
  • 第二步:加固库存核心逻辑
    替换为带校验的移除实现,从逻辑上避免参数错误导致的全删问题:
    public void RemoveFromInventory(Item item, int removeAmount = 1)
    {
        // 尝试获取当前物品库存,不存在直接告警返回
        if (!inventory.TryGetValue(item, out int currentCount))
        {
            Debug.LogWarning($"尝试移除未持有物品: {item.name}");
            return;
        }
        // 入参兜底:禁止传入非法的移除值
        removeAmount = Mathf.Clamp(removeAmount, 1, currentCount);
        int remainCount = currentCount - removeAmount;
        
        // 剩余数量为0时才删除字典条目
        if (remainCount <= 0)
        {
            inventory.Remove(item);
        }
        else
        {
            inventory[item] = remainCount;
        }
        // 触发库存变更事件
        onInventoryChange?.Invoke();
    }
    
  • 第三步:排查字典Key匹配问题(仅自定义Item类需要)
    如果Item不是ScriptableObject,需要在类内重写Equals和GetHashCode方法,确保相同物品的Key匹配一致,避免字典查询异常。

内容的提问来源于stack exchange,提问作者keremy96

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 15:24:03