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

Unity定时实例化Prefab触发空引用错误如何解决

问题诊断

你遇到的object reference not set to an instance of an object空引用错误,根源是clockTime字段的赋值逻辑完全写反了:

  1. 你声明了clockTime类型的字段后没有给它赋任何初始值,字段默认值为null
  2. Start()方法里写的clockTime.FindObjectOfType<clockTime>();是在空引用上调用方法,游戏运行进入Start生命周期的第一时间就会抛出空引用,根本不会执行到后续的Instantiate逻辑
  3. 就算修了Start的赋值,现有Update逻辑也会导致time2 == 10的时间段内每帧生成一个敌人,出现大量重复预制体
修复方案

按以下步骤修改代码即可解决问题:

  • 修正Start方法的赋值逻辑,把场景中查找到的clockTime组件实例赋值给对应字段,增加空校验方便排查挂载问题:
void Start()
{
    // 原错误写法:clockTime.FindObjectOfType<clockTime>();
    clockTime = FindObjectOfType<clockTime>();
    if (clockTime == null)
    {
        Debug.LogError("场景中未找到挂载clockTime脚本的对象,请检查场景配置");
    }
}
  • 增加单次生成标记,避免重复生成预制体,同时在Update里增加空引用兜底判断:
    先在类的字段声明区加一个生成标记:
    private bool _hasSpawnedAtTime10 = false;
    
    再修改Update逻辑:
void Update()
{
    if (clockTime == null || _hasSpawnedAtTime10)
    {
        return;
    }
    if (clockTime.time2 == 10)
    {
        Instantiate(enemy, new Vector3(3.66f, -1, 0.66f), Quaternion.Euler(0, -190, 0));
        _hasSpawnedAtTime10 = true;
    }
}
  • 校验项:你之前测试按键触发生成正常,说明enemy预制体的Inspector引用已经正确配置,不需要额外调整;只需要确认场景里确实有对象挂载了clockTime脚本,且time2变量的计时逻辑正常运行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:06:23