如何使用Unity脚本中的公共变量放入资源包

本文关键字:变量 资源 Unity 何使用 脚本 | 更新日期: 2023-09-27 18:06:04

我搜索了这个问题,发现了很多相关的信息,但有些不一致,没有明确的答案。

在Unity项目中,我正在创建带有脚本(c#)的游戏对象的资产包。我已经学会了怎么做,而且很有效。

我的问题是,我最终需要在构建资产包之前保留脚本中分配的公共变量的值。也就是说,我的预制件有一个带有公共变量的脚本。我对每个实例使用不同的公共值进行多次实例化。我需要所有这些来度过资产包的旅程。

我的当前进程如下:

  1. 从游戏对象中删除脚本。
  2. 将脚本构建成程序集
  3. 将游戏对象和组件打包到资源包
  4. 下载包到新项目
  5. 解包资源包并实例化游戏对象
  6. 使用AddComponent()将脚本程序集附加到游戏对象上

问题出在步骤1。我在绑定之前从游戏对象中删除脚本,因为如果我不这样做,它会在解包时抱怨所引用的脚本丢失了。而且,因为第6步使用AddComponent附加它,我不能真的这样做,如果该脚本已经是一个附加的组件。因此,在捆绑之前删除它们可以解决这些问题。

我错过了什么?我的方法有什么问题?我读到公共值在绑定时保存在游戏对象的脚本引用中,但是当我删除脚本组件时,我当然会失去它。

那么,请问,我如何通过资产捆绑过程维护公共值?我不应该在绑定之前删除脚本组件吗?如果是这样,我应该如何以不同的方式管理脚本?我需要捆绑两个脚本程序集和源文件吗?(我目前只捆绑程序集),并不会创建一个冗余时,附加的程序集?

如何使用Unity脚本中的公共变量放入资源包

Unity不将程序集存储在bundle中。它只存储脚本的序列化数据(即您的公共变量和带有[SerializeField]属性的变量)。但是它也为每种脚本类型存储脚本程序集的散列,因此您必须在与主可执行文件相同的项目中构建包,以避免丢失引用。

所以,你不必从他们的GameObjects中删除脚本,但你必须在同一个unity项目中构建bundle并在代码发生变化时重新构建它们。