使用的方法是:BuildPipeline.BuildPlayer
BuildPipeline.BuildPlayer 编译播放器
static function BuildPlayer (levels : string[], locationPathName: string, target : BuildTarget, options : BuildOptions) :string
用法举例:
@MenuItem ("Build/BuildWebplayerStreamed")
static function MyBuild(){
var levels : String[] = ["Assets/StreamedScene1.unity","Assets/StreamedScene2.unity",
"Assets/StreamedScene3.unity"];
BuildPipeline.BuildPlayer( levels,"StreamedWebplayer.unity3d",
BuildTarget.WebPlayer,BuildOptions.BuildAdditionalStreamedS
}
例如我们把上面烘焙好的场景保存成scene001,那么我们就可以写成
这样我们可以把这个scene001的场景导出成了scene001.unity3d的assetBundle。当我们想从外部加载这个烘焙好的场景时,可以使用WWW来下载他,但用法和一般的www加载assetBundle有点不同的用法。
假设我们把这个导出的asssetBundle放在了一个路径(url),那么我们可以这样加载它:
可以看出,在前两步,我们的做法和普通的www加载assetBundle是一样的,都是获取一个新的WWW资源,但下面的一步就有点不一样,由于他是一个场景,而不是一个GameObject,所以我们不能通过Instantiate来实例化他,而是用Application.LoadLevel 或者Application.LoadLevelAdditive之类的加载关卡的方法来读取他的。在读取之前,我们只需要随便的把获取回来的www.assetBundle赋予给一个变量,然后,我们就能按照关卡的名称来LoadLevel了。
不过我们需要注意以下几个问题:
1、和一般的assetBundle一样,假如我们导出的关卡场景里面包含了某些新项目里面没有的脚本,那么这些脚本在导入新项目的时候会全部丢失。
2、 NavMesh的外部加载只能使用Application.LoadLevel,如果使用Application.LoadLevelAdditive的话,NavMesh会全部丢失。也就意味着,NavMesh的场景一次只能加载一个,而不能同时加载多个。所以用NavMesh做动态大地图是不可行的。但LightMapping可以使用Application.LoadLevelAdditive ,可以多个场景同时叠加。