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
相关产品推荐
相关产品推荐

