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

Unity中如何在Inspector面板或脚本中引用Prefab预制体

public Gem gem;
public int coins;
public static SaveSystem instance {get;  private set;}
void Awake()
{
    coins = gem.LastCoins;
}

以上代码中Gem为自定义脚本,挂载该脚本的对象是预制体,可通过以下两种方式完成引用:

Inspector 面板可视化赋值

这是最简便、出错率最低的赋值方式,操作步骤如下:

  • 选中场景中挂载了SaveSystem脚本的游戏对象,在Inspector面板找到对应脚本组件
  • 在Project项目窗口定位到挂载了Gem脚本的目标预制体文件
  • 鼠标按住该预制体,直接拖拽到SaveSystem组件下gem字段的输入框中,松开鼠标即可完成赋值
  • 赋值成功后字段框会显示对应预制体的名称,运行时即可正常读取Gem组件上的LastCoins属性
脚本代码动态赋值

代码赋值需要注意:必须在Awake生命周期读取gem.LastCoins之前完成赋值,否则会触发空引用异常,常用实现方式有两种:

  • 加载Project窗口内的预制体本体
    先将目标Gem预制体放到项目中名为Resources的特殊文件夹下(无该文件夹可自行新建),修改Awake方法逻辑,在读取属性前先加载预制体组件:
    void Awake()
    {
        // 括号内填写预制体在Resources文件夹下的相对路径,无需加.prefab后缀
        gem = Resources.Load<Gem>("Gem预制体所在子路径/你的Gem预制体名");
        if (gem != null)
        {
            coins = gem.LastCoins;
        }
    }
    
  • 查找场景内的Gem预制体实例
    如果你要引用的是已经放置在场景中的Gem预制体生成的实例,而非Project窗口里的预制体原文件,可以在gem字段为空时自动查找场景内的组件:
    void Awake()
    {
        if (gem == null)
        {
            // 查找当前场景中所有激活状态对象上挂载的Gem组件,返回第一个找到的结果
            gem = FindObjectOfType<Gem>();
        }
        if (gem != null)
        {
            coins = gem.LastCoins;
        }
    }
    

注意:FindObjectOfType无法获取Project窗口中未实例化到场景的预制体文件,如果需要引用预制体本体做动态生成等操作,不要用该方法,优先选择拖拽赋值或者资源加载方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:48:25