熟悉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. Characters_of_the_Three_Kingdoms - 三国人物结构化数据

    Characters_of_the_Three_Kingdoms - 三国人物结构化数据 三国人物结构化数据 为什么会有这个项目 需求1:摆脱网上那些长篇累牍的文章: 需求2:只是想简单查看下人物姓甚 ...

  2. lr11_Run-time Settings选项介绍:

    lr11_Run-time Settings选项介绍: ●Run Logic ●Pacing ●Log 下面对每个

  3. ref:mysql丢失密码,如何修改?

    ref:https://www.linuxidc.com/Linux/2007-05/4338.htm mysql“Access denied for user 'root'@'localhost'” ...

  4. Linux的经典shell命令整理

    Linux的经典shell命令整理 1.删除0字节文件find -type f -size 0 -exec rm -rf {} \; 2.查看进程按内存从大到小排列ps -e -o “%C : %p ...

  5. jupyter notebook :一个交互式计算和开发环境

    一. IPython基础 代码自动补全:Tab键 可补全内容包括:变量名.函数名.成员变量函数.目录文件 内省(Itrospection) 在变量名之前或之后加上问号(?),这样可以显示这个对象的相关 ...

  6. 【JAVAWEB学习笔记】26_Linux基础:简介安装、常用命令和JDK、Mysql、Tomcat的安装

    Linux基础 学习目标 1.了解Linux的简介与安装 2.掌握Linux常用的命令 3.掌握Linux系统上JDK.Mysql.Tomcat的安装 一.Linux的简介 1.Linux的概述 Li ...

  7. wc 统计行数 字数

    Linux统计文件行数 2011-07-17 17:32 by 依水间, 168255 阅读, 4 评论, 收藏, 编辑 语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数. ...

  8. MongoDB——环境搭建

    项目中需要将一些读多改少的数据存入到 MongoDB 数据库中来提高效率,于是简单学习一些MongoDB数据库的知识,来进行应对,也是对自己知识盲区进行补充.本文主要学习介绍MongoDB数据库在Li ...

  9. Codeforces 798D

    这两天后缀数组整多了整点有意思的,随机算法. 题意给你两个数组,让你求一个排列使得这个排列对应的两个数组前n/2+1个数之和的二倍大于每个序列总和. 下面先贴下这题正解 二维贪心,按a从大到小排,把第 ...

  10. POJ 1655 BalanceAct 3107 Godfather (树的重心)(树形DP)

    参考网址:http://blog.csdn.net/acdreamers/article/details/16905653   树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...