我的游戏项目中有几个区域被分成几个场景,例如,假设有一个名为“地下室”的第一个区域,它被分成 Basement_1、Basement_2 和 Basement_3 场景;另一个区域“阁楼”分为 Attic_1 和 Attic_2。
一些资产(纹理图集和声音)在一个区域的所有场景中共享,所以我认为我可以为“地下室”制作一个包含所有共享资产的 AssetBundle,并为“阁楼”区域制作另一个包含共享资产的 AssetBundle . 然后当我的播放器即将进入“Basement”区域时,我会加载“Basement” AssetBundle,这样当我调用 Application.LoadLevel("Basement_1")、Application.LoadLevel("Basement_2") 或 Application.LoadLevel (“Basement_3”),共享资源(已加载到包中)不会不必要地重新加载,只会加载特定于场景的资源。然后,如果我到了游戏知道不再需要地下室资产的地步,或者至少在很长一段时间内都不需要,那么我会卸载捆绑包,
我的问题是:它是这样工作的吗?例如,假设我即将进入“Basement”,所以如果我从磁盘加载我的“Basement”AssetBundle,并且基本上只是在其上调用 LoadAllAssets(),Application.LoadLevel("Basement_1") 会“自动”查找我已加载的捆绑包中的资产?还是 Application.LoadLevel 只是重新加载它需要的资产?
我目前的理解是 Application.LoadLevel 不会自动在 AssetBundle 中查找。如果是这样,有没有办法让它看起来在加载的 AssetBundle(s) 中?还有另一种我看不到的方法吗?
这个想法是尝试减少加载时间,因为例如进出门可能会触发对 Application.LoadLevel("Basement_X") 和 Application.LoadLevel("Basement_Y") 的来回调用。
在此先感谢您的任何见解;)
干杯!