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

Unity触发IndexOutOfRangeException数组越界 背包系统CreateSlots方法报错

错误原因
  • 核心逻辑问题:你在StaticInterface的CreateSlots方法中,循环边界取的是背包物品数组inventory.Container.Items的长度,但循环内访问的是UI槽位数组Slots的对应下标,只要Slots数组的元素数量小于背包物品数组的长度,就会触发数组下标越界报错。
  • Unity定位到父类抽象方法声明行只是调用栈的溯源标记,实际错误仅和子类的数组访问逻辑有关,不需要修改父类的抽象方法定义。
修复方案

1. 调整循环逻辑增加边界防护

优先取两个数组长度的较小值作为循环上限,从代码层面杜绝越界可能,修改后的CreateSlots代码如下:

public override void CreateSlots()
{
    // 前置空校验,避免空引用报错
    if (Slots == null || Slots.Length == 0)
    {
        Debug.LogError("当前StaticInterface组件的Slots数组未配置,请检查Inspector面板的赋值", this);
        return;
    }
    if (inventory == null || inventory.Container?.Items == null)
    {
        Debug.LogError("背包对象未正确赋值,请检查组件的inventory参数配置", this);
        return;
    }

    itemsDisplayed = new Dictionary<GameObject, InventorySlot>();
    // 取两个数组的较小值作为循环上限,保证不会访问到不存在的下标
    int loopLimit = Mathf.Min(Slots.Length, inventory.Container.Items.Length);
    for (int i = 0; i < loopLimit; i++)
    {
        var obj = Slots[i]; 

        AddEvent(obj, EventTriggerType.PointerEnter, delegate { OnEnter(obj); });
        AddEvent(obj, EventTriggerType.PointerExit, delegate { OnExit(obj); });
        AddEvent(obj, EventTriggerType.BeginDrag, delegate { OnDragStart(obj); });
        AddEvent(obj, EventTriggerType.EndDrag, delegate { OnDragEnd(obj); });
        AddEvent(obj, EventTriggerType.Drag, delegate { OnDrag(obj); });

        itemsDisplayed.Add(obj, inventory.Container.Items[i]);
    }

    // 可选:增加长度不一致的警告,方便调试
    if (Slots.Length < inventory.Container.Items.Length)
    {
        Debug.LogWarning($"UI槽位数量({Slots.Length})小于背包容量({inventory.Container.Items.Length}),超出部分的物品将不会在界面上显示", this);
    }
}

2. 编辑器侧配置对齐

如果你做的是固定槽位的装备栏界面,需要保证两个配置的数值完全一致:

  • 选中挂载StaticInterface组件的UI对象,检查Inspector面板中Slots数组的元素数量
  • 打开你用到的InventoryObject资产文件,检查容器配置的格子数量
    两个数值必须相等才能保证所有背包格子都能正常显示和交互

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:36:05