问题
- Resources文件夹中的资源文件重复出现在AssetBundle中
原因
如果AssetBundle中的资源引用了一个未被其它Bundle包含的资源,这个资源会被加入这个包中。这就意味着它在一个场景中被引用或者被另一个Bundle引用,这个资源就会重复。这也适用于Resource文件夹,因此Resources文件夹中的任何资源被添加到AssetBundle,它都会重复加载。这个做法为了防止AssetBundle损坏。
如果一个Bundle引用了某个不在bundle中的资源,可能存在一种情况bundle被打包,然后引用的资源被删除。这将会损坏这个Bundle,因为它被打包后资源引用被丢失了。
解决方案
明确区分Resources文件夹和AssetBundle非常重要。对于所有其它资源重要的是,
所有依赖资源都需要被标记到AssetBundle以防止重复。必须要确保AssetBundle和Resources之间没有依赖关系。
防止出现这种情况的一个简单方法是使用AssetDatabase.GetDependencies(fullAssetPath)来检查将要打包到AssetBundle中的每个资源的所有依赖项。 如果它返回存储在Resources文件夹中的资源,那么该资源应该从Resources文件夹中删除或不要标记到任何bundle中。
更多信息
https://docs.unity3d.com/ScriptReference/AssetBundle.html
https://docs.unity3d.com/Manual/BuildingAssetBundles.html