场景用SceneManager.LoadScene函数加载。如果场景已经用Assetbundle打包,那么在加载场景前,场景所在的Bundle要先加载。当场景所在的bundle文件被加载后,AssetBundle有个GetAllScenePaths()接口,然后SceneManager.LoadScene加载,参数用这个接口获得的场景路径。详见下面代码。这种方式不用再在BuildSetting中把这些场景拖进去,只需保留一个入口场景即可。
Navmesh烘焙出来后,带在场景信息中,就不用单独加载,也不用单独打Bundle了,类似的还有Lightmap。相当于这部分可以忽略了,只关注场景所在的bundle加载。
需要注意的是,场景的bundle需要单独管理卸载。因为比较特殊,没有LoadAsset这种操作,没有记录资源引用计数。在我的设计中,这种情况确实没有资源的引用计数,但有bundle的引用计数。释放是根据bundle的引用计数释放的。
public class LoadScene : MonoBehaviour
{
private AssetBundle myLoadedAssetBundle;
private string[] scenePaths;
// Use this for initialization
void Start()
{
myLoadedAssetBundle =