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

为何第二次及之后实例化Prefab时报错?已在编辑器赋值仍异常

问题分析与解决方案

你的问题核心是第一次实例化预制体正常,但后续触发时抛出UnassignedReferenceException,即使已经在Inspector中赋值了circlePrefab。以下是针对性的原因排查和解决方法:


1. 预制体本身挂载了SpawnStars脚本

这是最常见的触发原因:你的circlePrefab预制体上也挂载了SpawnStars组件。第一次按下空格时,场景中初始的SpawnStars组件正常实例化预制体;但新生成的预制体实例上也带有未赋值circlePrefab的SpawnStars组件。当你再次按空格时,所有存在的SpawnStars都会执行Update逻辑,其中新实例因circlePrefab为空,直接抛出错误。

解决方法:

  • 打开circlePrefab预制体,检查是否挂载了SpawnStars脚本,若有直接移除该组件(生成的星星通常不需要具备生成功能)。
  • 若预制体确实需要保留该脚本,则在预制体的Inspector面板中为circlePrefab变量赋值。

2. 代码层面增加防护机制

为避免空引用崩溃并快速定位问题,建议在代码中添加空引用检查:

using UnityEngine;

public class SpawnStars : MonoBehaviour
{
    [SerializeField] GameObject circlePrefab;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (circlePrefab != null)
            {
                Instantiate(circlePrefab);
            }
            else
            {
                Debug.LogError("circlePrefab未赋值,请在Inspector中设置!", this);
            }
        }
    }

    // 编辑模式下提前检查赋值状态
    private void OnValidate()
    {
        if (circlePrefab == null)
        {
            Debug.LogWarning("circlePrefab未赋值!", this);
        }
    }
}

3. 其他排查方向

若上述方法无效,可检查以下内容:

  • 场景中是否存在多个挂载SpawnStars的对象,其中某个对象的circlePrefab未赋值。
  • 是否有其他脚本在运行时修改了circlePrefab的值,将其置为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:36:04