熟悉unity的朋友都应该知道,unity有内部LightMapping烘焙和NavMesh寻路的功能。但这些非常好用的功能,都是基于对某个已经保存的关卡(scene)进行烘焙(Bake)的操作,我一直以为,一般来说这样非常难做到外部载入或者动态载入的。

但通过近期一段时间的研究,发现事实上这些基于scene的功能,也是能够动态载入的,尽管在使用上是有一定的限制,只是合理利用还是能做到不少想要的效果的。

如果我们限制有这种项目要求,游戏项目是网页游戏,因为容量的关系,我们全部的场景都是外部动态载入的,但为了效果好,我们使用了 LightMapping烘焙了场景,而为了有寻路功能,我们对场景进行了NavMesh的烘焙。我们希望把这个烘焙了的场景像一般的 assetBundle那样从外部载入进来。

如今我们须要把这个烘焙好的场景导出成assetBundle。

使用的方法是: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.BuildAdditionalStreamedScenes);

}

比如我们把上面烘焙好的场景保存成scene001,那么我们就能够写成

var levels : String[] = ["Assets/scenes/scene001.unity"];

 BuildPipeline.BuildPlayer( levels, "scene001.unity3d",

  BuildTarget.FlashPlayer , BuildOptions.BuildAdditionalStreamedScenes);

这样我们能够把这个scene001的场景导出成了scene001.unity3d的assetBundle。当我们想从外部载入这个烘焙好的场景时,能够使用WWW来下载他,但使用方法和一般的www载入assetBundle有点不同的使用方法。

如果我们把这个导出的asssetBundle放在了一个路径(url),那么我们能够这样载入它:

WWW www = new WWW(Url);

        yield return www;

        if (www.error == null)

        {

            AssetBundle level = www.assetBundle;

            Application.LoadLevelAdditive(“”);

        }

可 以看出,在前两步,我们的做法和普通的www载入assetBundle是一样的,都是获取一个新的WWW资源,但以下的一步就有点不一样,因为他是一个 场景,而不是一个GameObject,所以我们不能通过Instantiate 来实例化他,而是用Application.LoadLevel 或者Application.LoadLevelAdditive 之类的载入关卡的方法来读取他的。在读取之前,我们仅仅须要随便的把获取回来的www .assetBundle赋予给一个变量,然后,我们就能依照关卡的名称来LoadLevel了。

如今,关卡已经能载入进一个新的项目了,我们能够看到,lightmapping的效果,和NavMesh寻路的网格,依旧存在。

只是我们须要注意下面几个问题:

1、和一般的assetBundle一样,假如我们导出的关卡场景里面包括了某些新项目里面没有的脚本,那么这些脚本在导入新项目的时候会所有丢失。

2、 NavMesh的外部载入仅仅能使用Application.LoadLevel ,假设使用Application.LoadLevelAdditive 的话,NavMesh会所有丢失。也就意味着,NavMesh的场景一次仅仅能载入一个,而不能同一时候载入多个。所以用NavMesh做动态大地图是不可行 的。但LightMapping能够使用Application.LoadLevelAdditive ,能够多个场景同一时候叠加。

关于LightMapping和NavMesh烘焙的动态载入的更多相关文章

  1. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式

    注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...

  2. js中动态载入css js样式

    js中动态载入css样式,方法如下: //<link rel="stylesheet" type="text/css" href="http:/ ...

  3. 深入浅出Android动态载入jar包技术

    在实际项目中.因为某些业务频繁变更而导致频繁升级client的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路.将核心的易于变更的业务封装在jar包里然后通过网络下载下来 ...

  4. Unity 动态载入Panel并实现淡入淡出

    unity版本:4.5 NGUI版本:3.6.5 参考链接:http://tieba.baidu.com/p/3206366700,作者:百度贴吧 水岸上 动态载入NGUI控件,这里用Panel为例说 ...

  5. 实现Android 动态载入APK(Fragment or Activity实现)

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 近期由于项目太大了.导致编译通只是(Android对一个应用中的方法个数貌似有 ...

  6. 动态载入TreeView时让TreeView节点前显示加号

    解释下标题,我这里通过webservice获取数据并动态载入TreeView节点.那么某个节点展开前它是没有子节点的.那么它就不显示加号.这样会让用户误以为此节点不能展开.我是这样做的,每次创建节点a ...

  7. C# 动态载入Dll

    1.新建測试dll及方法,用vs2010新建winform程序,详细代码例如以下: using System; using System.Collections.Generic; using Syst ...

  8. Android 使用动态载入框架DL进行插件化开发

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456    (来自时之沙的csdn博客) 概述: 随着应用的不断迭代.应用的体积不断增大,项目越来越臃肿,冗余添 ...

  9. cocos2dx3.2 异步载入和动态载入

    半个月没有更新博客,从这个项目開始学习了非常多细节的东西,都不太成系统.可是却是开发上线中必须经历的东西.比方超级玛丽系列(一)中的正确的异步载入,正确的分层.正确的合成和载入plist.及时的移除未 ...

随机推荐

  1. csu 1803(余数分类)

    1803: 2016 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 565  Solved: 364[Submit][Status][Web Board ...

  2. PHP 文件夹操作「复制、删除、查看大小、重命名」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

  3. 第六章:加载或保存JSON数据

    加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多 ...

  4. 【Java】数组的打印输出

    import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = { 1, ...

  5. 转:linux关闭防火墙iptables

    ref:https://jingyan.baidu.com/article/066074d64f433ec3c21cb000.html Linux系统下面自带了防火墙iptables,iptables ...

  6. java 抽象类 接口 区别

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 接口 里面 都是抽象方法. 接口里面的 字段 都是 public static fina ...

  7. hdu 3681 压缩dp+搜索

    题意:一个机器人想越狱,他只能带一定电量的电池,'S'表示道路可行,'G'表示充电器, 只可充电一次,但是可以经过很多次.'F'表示起点,'Y'表示要破坏的机关,也是只能破坏一次,但是可以经过无数次. ...

  8. JDK源码(1.7) -- java.util.Collection<E>

     java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...

  9. 51nod 1040 最大公约数之和 欧拉函数

    1040 最大公约数之和 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 Description 给 ...

  10. Google Code Jam 2009 Qualification Round Problem A. Alien Language

    https://code.google.com/codejam/contest/90101/dashboard#s=p0 Problem After years of study, scientist ...