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

C# Unity数组索引未越界却报错 长度显示为1问题排查

问题根因

这是Unity序列化机制导致的典型问题:
你定义的public string[] fen是public字段,Unity默认会对所有public可序列化字段做Inspector序列化存储,如果挂载PuzzleVariables脚本的场景对象/预制体,曾经在Inspector面板给fen数组设置过Size=1、存过1个元素,运行时Unity会直接读取Inspector中序列化的数组值,完全覆盖你在代码里写的3个元素的初始化逻辑。这就是你打印数组长度始终为1、判断条件直接触发跳转ModuleCompleted页面的核心原因——你代码里写的3个FEN字符串根本没有在运行时被加载到数组里。

解决方案

按以下步骤处理即可:

  • 找到挂载PuzzleVariables脚本的单例对象,选中后在Inspector面板查看fen数组属性,你会直接看到数组的Size值确实为1,和你打印的结果一致。
  • 两种修复方式二选一即可:
    • 直接在Inspector里把fen数组的Size改为3,把你代码里写的3个FEN字符串依次填入对应元素槽;也可以点击脚本组件右上角的更多菜单(三个点图标),选择Reset重置组件,重置后会自动同步你代码里写的初始数组值。
    • 如果不想让Inspector覆盖代码里的初始化配置,可以给fen字段添加[NonSerialized]特性,告诉Unity不要序列化这个字段,运行时就会固定执行代码里的数组初始化逻辑,代码写法如下:
[System.NonSerialized]
public string[] fen =   
{
    "2q3k1/8/8/5N2/6P1/7K/8/8 w",
    "7k/8/8/4b1n1/8/8/5PPP/5R1K w",
    "r1bqkb1r/pppp1ppp/2n5/4p3/2B1N3/5N2/PPPP1PPP/R1BQK2R b"
};
  • 额外优化建议:你当前的边界判断逻辑可以简化,数组合法索引范围是0 ~ Length-1,不需要做puzzlenumber +1的计算,直接判断puzzlenumber - 1 >= fen.Length即可跳转完成页,减少多余计算带来的出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:57:20