Unity - 是否有必要从游戏构建中排除 AssetBundle 中使用的资产?

Unity - Is it necessary to exclude assets being used in AssetBundles from game build?

很难找到有关 AssetBundle 实际工作原理的大量信息。找不到关于如何使用游戏构建管理资产包的任何解释。

基本上我的项目 window 中有一个名为 AssetBundles 的文件夹。我放入此文件夹中的所有资产都作为 AssetBundle 构建在我的构建目录(如 GameName/Data/AssetBundles)中的文件夹中,然后在需要时加载。

但是当我自己构建游戏时,它是否知道在游戏构建中不包括在 AssetBundle 中使用的这些资产?或者我需要以某种方式排除它们吗?

编辑:我取得了一些进步。

据我了解,只有位于构建设置中的场景中的资产才会与游戏构建一起构建。脚本总是内置在游戏构建中(我不确定是否有办法解决这个问题,但这对我来说不是问题)。

所以我在游戏构建中有一个场景作为游戏的启动对象。这个场景有一个 Asset Manager 脚本,在 Awake 中指定了 DontDestroyOnLoad

我的资产管理器脚本基本上只处理 loading/unloading 的捆绑包、资产和实例。

我目前不太确定如何为场景构建资源包。我使用 LoadAllAssets 然后执行 LoadLevel,但如果多个场景共享一些资产怎么办?场景构建是否最终会因拥有可共享的资产副本而变得臃肿?我读到在 Unity 5 中会自动处理依赖项,但我不确定这是否与此有关。

当你构建游戏时,它应该只使用构建中的资产,就像你使用的任何东西一样,或者是构建中使用的任何东西的依赖项。

我发现下面的 post 有一个示例项目,其中包含在 Unity 5 中使用 AssetBundle 的不同方式。

http://forum.unity3d.com/threads/new-assetbundle-build-system-in-unity-5-0.293975/

它包含一个 building/loading 场景的示例,它似乎可以正常工作(它会自动确定依赖关系..所以你所要做的就是确保你在共享中 build 共享资产资产包(或他们自己的包)以提高效率)。

我在 build 上做的唯一不同的事情是定义 AssetBundleBuild(基本上我组织了我的项目文件夹,以便资产存储在与其资产包名称相关的子文件夹中,并且然后在 build 上检查这些文件夹并添加它们)。

出于某种原因,我这样做的方法似乎打破了依赖关系,而在编辑器中使用资产包功能 ui 似乎可行(手动为每个资产命名包......如果你在几个不同的包中有数百个资产)然后使用 BuildAssetBundles 没有 builds 参数。

我仍然没有真正回答我原来的问题Is it necessary to exclude assets being used in AssetBundles from game build?

但为了安全起见,我在游戏 build 中只有 1 个场景实际上是 built,而且那个场景只有一个资产管理器脚本,用于处理资产包和它不会在负载时破坏。如果您将它们全部作为资产包,则无需将其他场景设置为 built。