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

升级Unity 2021.1.26f1后跑酷游戏出现NullReferenceException报错如何解决

错误原因说明

该问题核心是代码逻辑错误,小概率伴随资源配置缺失,具体问题和修复方案如下:

1. 核心错误:LevelManager单例未正确初始化

这是你两处报错的最主要诱因:

  • 首先存在语法错误:你写的public static LevelManager.Instance { set; get;}不符合C#语法规范,属性名前不应该加类名和点
  • 其次缺少赋值逻辑:Awake方法中没有给静态Instance属性赋值,导致所有调用LevelManager.Instance的地方都是空引用,直接触发PieceSpawner第25行的空报错。

修复代码:

修改LevelManager.cs中的单例声明和Awake方法:

// 替换原错误的单例声明
public static LevelManager Instance { get; private set; }

private void Awake()
{
    // 单例判重逻辑,避免场景内多个LevelManager冲突
    if(Instance != null && Instance != this)
    {
        Destroy(gameObject);
        return;
    }
    Instance = this;

    cameraContainer = Camera.main.transform;
    currentSpawnZ = 0;
    currentLevel = 0;
}

2. 次要错误:Segment脚本Awake执行时机问题

第二个报错指向Segment.cs第22行的Awake方法,是因为Unity实例化对象时,Awake的执行优先级高于你给LevelManager.Instance赋值的时机,如果Segment的Awake中直接调用了LevelManager.Instance,就会拿空值报错。

修复方案:

把Segment.cs的Awake方法中所有依赖LevelManager.Instance的逻辑,移动到Start方法中即可。

3. 配置检查项

如果修改完代码仍有报错,检查以下配置项:

  • 场景中必须有且仅有一个挂载了LevelManager脚本的激活对象
  • LevelManager的Inspector面板中,ramps、slides、longblocks、jumps、availableSegments、availableTransition所有公开列表都必须提前拖入对应预制体,不能为空
  • 所有Segment预制体必须挂载Segment脚本,所有Piece预制体必须挂载Piece脚本,否则GetComponent会返回空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:01