Optimization Unity 4-使用AssetBundle预加载跨多个场景共享的资产?

Optimization Unity 4-使用AssetBundle预加载跨多个场景共享的资产?,optimization,unity3d,assetbundle,Optimization,Unity3d,Assetbundle,我在我的游戏项目中有几个区域被分割成几个场景,例如,假设有一个叫做“地下室”的第一个区域被分割成地下室1、地下室2和地下室3场景;另一个区域“阁楼”,分为阁楼1和阁楼2 一些资产(纹理图集和声音)在一个区域的所有场景中共享,因此我认为我可以使用“地下室”的所有共享资产创建一个资产绑定,使用“阁楼”区域的共享资产创建另一个资产绑定。然后,当我的播放器即将进入“地下室”区域时,我会加载“地下室”资产绑定,这样当我调用Application.LoadLevel(“地下室1”)、Application.

我在我的游戏项目中有几个区域被分割成几个场景,例如,假设有一个叫做“地下室”的第一个区域被分割成地下室1、地下室2和地下室3场景;另一个区域“阁楼”,分为阁楼1和阁楼2

一些资产(纹理图集和声音)在一个区域的所有场景中共享,因此我认为我可以使用“地下室”的所有共享资产创建一个资产绑定,使用“阁楼”区域的共享资产创建另一个资产绑定。然后,当我的播放器即将进入“地下室”区域时,我会加载“地下室”资产绑定,这样当我调用Application.LoadLevel(“地下室1”)、Application.LoadLevel(“地下室2”)或Application.LoadLevel(“地下室3”)时,共享资产(已加载到捆绑包中)不会不必要地重新加载,将仅加载场景特定的资源。 然后,如果游戏知道地下室资产不再需要,或者至少在很长一段时间内不再需要,那么我会卸载捆绑包,释放内存,然后加载任何其他可能相关的捆绑包(例如阁楼捆绑包)

我的问题是:它是这样工作的吗?例如,假设我即将进入“地下室”,那么如果我从磁盘加载我的“地下室”资产绑定,并且基本上只对其调用LoadAllAssets(),Application.LoadLevel(“地下室1”)“会自动”在我加载的绑定中查找资产吗?或者Application.LoadLevel会重新加载它需要的资产吗

我目前的理解是Application.LoadLevel不会自动在AssetBundle中查找。如果是,是否有办法使其在加载的资产绑定中显示?还有其他我看不到的方式吗

这样做的目的是尽量减少加载时间,因为例如进进出出一扇门可能会触发对Application.LoadLevel(“base_X”)和Application.LoadLevel(“base_Y”)的来回调用

提前感谢您提供的任何见解;)


干杯

资产捆绑包可以按照您建议的方式使用,但它们主要用于解决从服务器下载内容的问题。基本上,如果您不打算下载任何东西,您就没有很多理由使用资产包

另一方面,预制件似乎正是您所需要的。它们是游戏对象,你可以将它们“打包”到可重复使用的预制件中。如果您想在同一场景或不同场景中重复使用游戏对象,预设是一种方法

如果您正在以编程方式实例化和定位游戏对象,请执行以下操作:

GameObject myItem = Instantiate(Resources.Load("myPrefab")) as GameObject;
假设myprefable是名为Resources的文件夹中的一个预置

如果在编辑器中创建场景,只需将预设拖放到场景中,它们将成为常规游戏对象

您可以通过使用来优化场景之间的游戏对象使用,以防止对象被破坏。我强烈建议你只在它们绝对不变的情况下使用它。这种(对对象的重用)可能会导致未经思考的问题,并延迟游戏的开发


也就是说,请记住,如果您保留对加载的预制件、资产包、游戏对象或其他对象的引用,它将永远不会被垃圾收集,因此您可以使用
object.DontDestroyOnLoad
和/或静态引用将其保留在内存中。

感谢您的回复。我不确定预设是否是我所需要的,我知道预设可以重复使用,但是如果我在多个场景中重复使用预设,那么当我在这些新场景上调用Application.LoadLevel时,预设包含的资产肯定会重新加载,对吗?因为据我所知,Application.LoadLevel将卸载当前场景(包括它使用的预制体?)并加载新场景。对于场景之间的常见对象,这就是我想要避免的:我只想“一次”加载它们。DontDestroyOnLoad将防止它们被破坏