【问题标题】:How to use public variables in Unity scripts put into asset bundles如何在 Unity 脚本中使用公共变量放入资产包中
【发布时间】:2014-05-30 19:36:05
【问题描述】:

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

在 Unity 项目中,我正在使用具有脚本 (C#) 的游戏对象创建资产包。我已经学会了如何做到这一点,而且很有效。

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

我目前的流程是这样的:

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

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

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

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

【问题讨论】:

    标签: c# scripting unity3d assetbundle


    【解决方案1】:

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

    因此,您不必从游戏对象中删除脚本,但您必须在同一个统一项目中构建捆绑包并在代码更改时重新构建它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多