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

Unity C# 检视面板赋值数组运行时触发NullReferenceException报错

问题根因

报空引用说明characters数组本身是null,和你预期的检视面板已赋值不符,只会是以下几种情况:

  • 方法调用时机早于Unity序列化赋值完成节点,检视面板的public字段赋值是在Awake生命周期后、Start生命周期前完成的,如果在Awake、或者场景加载未完成的阶段调用createInventory(),拿到的就是未初始化的null数组
  • 场景里存在多个挂载Inventory脚本的对象,你给其中一个实例的数组做了赋值,但实际调用方法的是另一个没有赋值的脚本实例
  • 检视面板的数组赋值没有真正保存:要么数组Size参数被设为0,要么赋值后触发了组件Revert操作,引用被重置
  • 其他逻辑在调用createInventory()前,通过代码重新赋值了characters字段(比如执行过characters = new Image[0]),覆盖了序列化的引用
修复方案
  1. 先给方法加防御性判空,快速定位问题点:
public void createInventory(){
    // 校验数组本身状态
    if (characters == null || characters.Length == 0)
    {
        Debug.LogError("characters数组未初始化", this);
        return;
    }

    for (int i = 0; i < characters.Length; i++){
        // 校验单个元素引用,避免单个槽位丢失引用报错
        if (characters[i] == null)
        {
            Debug.LogError($"数组索引{i}位置的Image引用为空", this);
            continue;
        }
        characters[i].sprite = character;
    }
}

加了this参数的Debug日志可以在控制台直接点击定位到对应的脚本实例,快速排查是不是重复挂载的问题。

  1. 逐项排查配置和逻辑:
  • 选中挂载Inventory脚本的对象,查看Inspector面板:确认characters数组的Size和你赋值的元素数量一致,展开数组后每个槽位都有对应的Image引用,不存在None (Image)的空槽
  • 在Hierarchy面板搜索Inventory,列出所有挂载该脚本的对象,删除多余的、未做赋值的冗余脚本实例
  • 调整createInventory()的调用时机:如果是生命周期内自动调用,把逻辑从Awake移到Start执行;如果是场景切换后调用,等SceneManager.sceneLoaded回调触发后再执行
  • 全局搜索characters =关键字,检查是否有其他代码提前覆盖了数组引用

调试提示:你原来写在循环里的Debug.Log(characters)只会打印整个数组的类型信息,没有调试价值,需要打印单个元素的话可以改成Debug.Log($"索引{i}的Image:{characters[i]}", this);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:12:59