我一直在进行有关统一性AssetBundle
和Resources
阶级的研究,但到目前为止,我还没有找到在构建时卸载资源的方法。这不是用于内存管理,而是用于构建/ apk大小。
例如,我有一个LocalizedAudio
类:是否为该类的实例设置了FR声音和US声音?我需要找到一种方法来告诉Unity我只希望导出FR声音。
问题在于,默认情况下将导出成员(具有属性MonoBehaviour
的public
成员或private
成员[SerializeField]
)所指向的每个资源。是否可以覆盖此行为?,当您使用5种或更多语言,但您只想为一种语言构建时,apk会变得非常大。对于中型游戏而言,在构建之前停用每个资源都是非常繁琐的。
我们的目标是将不同的语言集加载到内部版本中,但是我不确定使用AssetsBundle
和会不会正确Resources
。
只要资源位于“资源”文件夹中,便始终包含这些资源。从构建中删除它们的唯一方法是将它们移出该文件夹或重命名该文件夹。您可以对其进行设置,以使每个语言包都对资源文件使用类似的命名约定,并且在构建时仅包括某些语言包。
资产捆绑包并不总是对设计人员友好,而是一种实现动态包含资产的好方法。
您还有另一个选择:使用预处理程序指令定义或取消定义某些变量。
为了争辩,假设您的字段是这样定义的:
[SerializeField] LanguagePack fr;
[SerializeField] LanguagePack en;
这里的类型LanguagePack
并不重要。它只是您当前要序列化的任何类型的替身。
您可以调整类,以便这些字段的声明是有条件的:
#if FRENCH || UNITY_EDITOR
[SerializeField] LanguagePack fr;
#endif
#if ENGLISH || UNITY_EDITOR
[SerializeField] LanguagePack en;
#endif
使用Unity编辑器时,所有字段均可用。当建立一个项目,你可以编辑“脚本定义符号”中的玩家设置启用ENGLISH
,FRENCH
或任何其他语言包。
这可能需要引入一些复杂的代码,因为定义的变量将取决于构建设置。在许多情况下,如果添加用作别名的属性,它将导致代码更简单:
LanguagePack current {
get {
#if FRENCH
return fr;
#else
return en;
#endif
}
}
所有这些的优点是,游戏仍然易于在检查器中进行编辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句