Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在放入资产包的Unity脚本中使用公共变量_C#_Scripting_Unity3d_Assetbundle - Fatal编程技术网

C# 如何在放入资产包的Unity脚本中使用公共变量

C# 如何在放入资产包的Unity脚本中使用公共变量,c#,scripting,unity3d,assetbundle,C#,Scripting,Unity3d,Assetbundle,我搜索了这个问题,发现了很多相关信息,但有些不一致,没有明确的答案 在一个Unity项目中,我使用带有脚本(C#)的游戏对象创建资产包。我已经学会了如何做到这一点,而且很有效 我的问题是,我最终需要保留在构建资产包之前分配的脚本中公共变量的值。也就是说,我的预置有一个带有公共变量的脚本。我多次使用不同的公共值对每个实例进行实例。我需要所有这些来度过这次资产捆绑旅行 因此,我目前的进程是: 从游戏对象中删除脚本 将脚本构建到程序集中 将游戏对象和组件打包到资产包中 将捆绑包下载到新项目中 解包资产

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

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

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

因此,我目前的进程是:

  • 从游戏对象中删除脚本
  • 将脚本构建到程序集中
  • 将游戏对象和组件打包到资产包中
  • 将捆绑包下载到新项目中
  • 解包资产包并实例化游戏对象
  • 使用
    AddComponent()
  • 问题是第一步。在绑定之前,我会从游戏对象中删除脚本,因为如果我不删除,它会在解包时抱怨引用的脚本丢失。而且,由于步骤6使用
    AddComponent
    附加它,如果脚本已经是附加的组件,我就不能真正这样做。因此,在绑定之前删除它们可以解决这些问题

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


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

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

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