博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大型场景无缝连接的实现理论基础
阅读量:6627 次
发布时间:2019-06-25

本文共 1539 字,大约阅读时间需要 5 分钟。

 

 

大型场景的无缝连接目前只找到两种方式,只有理论没有具体代码,目前正在实验,供大家参考共同突破这个难关。

将每个场景单独build出来,作为各自独立的工程,然后通过webplayer进行切换场景,在网上也有人这样做,但普遍认为这样做不好。这样做的优点是场景大的时候可以避免长时间的下载,缺点就是要频繁的切场景,等待切场景的时间可能会比较长,而且怎么样从服务器上把工程文件整个都拷贝过来还是个问题。

比较主流的方式是两种:

第一种是一开始就把所有场景都add到build的列表里,也就是说这个工程里包含了所有的场景。但在游戏一开始,除了玩家所在的主场景外,其他场景并没有加载,也就是看不到的。要实现不切屏的效果,需要注意两个方面:

1、 每个场景中的每个物体都要设置为DontDestroyOnLoad(object),也就是在进入下一个场景后,上一个场景的东西不能释放掉。

2、 场景内的物体用prefab方式来创建,LoadLevel时要做相应的判断,如果场景中已经有这个物体了就不再创建。

说一下以上两点的原因:要实现无缝连接,也就是说不能让玩家在移动过程中有突然切屏的感觉,那就要以玩家对象作为穿越场景的连贯体。海海的视频里教大家的是每个场景里都创建一个玩家对象(小坦克),这就是典型的切屏而非无缝连接。无缝连接只需要在一个场景里创建玩家对象,然后在各个场景边界事先设定一个CUBE,并勾选CUBE的IsTrigger属性(该属性表示可以触发碰撞消息但并不真的产生碰撞),这样当玩家撞到这个边界的时候就会调用LoadLevel函数创建第二个场景,而因为第一个场景中所有物体均为DontDestroyOnLoad也就是不会释放资源,所以第一个场景中所有资源(包括玩家对象)都没有释放,至于玩家的坐标点记录问题可以使用static变量,如果服务器能架好的话,也可以使用数据库来进行存储。

这种方式主要解决的问题是大型工程里太多的场景会占用大量的内存,这样做就可以避免一开始游戏就把所有资源都载入内存中去执行。但如果工程没那么大的话这么做也就只是为了更好的场景切换效果,实现无缝连接。在局部场景地图中可以使用这种方式。

缺点就是要把所有场景都打到一个包里,然后再发布,玩家要玩的话,一开始要下载一阵子,而且为了切场景的时候资源不会重复创建,每次切的时候都要进行判断,如果物件已经被创建了,就不能再次创建。

第二种方式是使用AssetBundle类,动态地从一个地方,比如服务器,实时地下载所请求的资源,这些资源都是.assetbundle型的文件,一般是把工程中的Object比如模型网格,纹理贴图等资源制作成这种类型的文件。Assetbundle文件会保存在工程中编辑时候的所有属性比如空间位置等。

实现过程跟第一种差不多,但是工程Build的时候只add进一个场景,工程文件小,比较适合发布。随着玩家在场景地图中的走动,用第一种方式的Cube边界,就可以向服务器请求下载其他地图的资源,在后台进行下载。现在想实现一下用九宫格地图的方式来进行场景的拓扑。

这种方式比较适合web Game的发布和更新,理论上可以支持无限大的场景。

当然实际的开发过程中,可以以上三种方式混合着用,可以避免很多细节问题。比如在大场景中漫游就用第三种方式,而从大场景进入一个模型的内部,可以使用第一种直接切换工程,转换到房间内部场景,这样就不必要为这个房子模型单独开发内部结构,简化美术的工作。而在房子内部,使用第二种方式,避免同时加载过多的房间内的细节。

转载于:https://www.cnblogs.com/yanghaihao/archive/2013/01/19/2867303.html

你可能感兴趣的文章
浅谈CSS盒子模型
查看>>
实现iFrame自适应高度,原来很简单!
查看>>
get app id
查看>>
poj 3624 0/1背包暨0/1背包的学习
查看>>
[俗一下]世界500强公司的面试问题与答案提示 [转]
查看>>
使用 Excel Services ,结合 Analysis Services 在 SharePoint 中发布报表
查看>>
SQL Server数据导入导出技术概述与比较
查看>>
format的用法
查看>>
DHCPv6 server port and DHCPv6 client port
查看>>
BitmapFactory.Options避免 内存溢出 OutOfMemoryError的优化方法
查看>>
Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
查看>>
DNGuard 免费的DotNet加密保护工具 V1.0
查看>>
编程中的命名设计
查看>>
easyui form validate总是返回false原因
查看>>
在(CListView)列表视图中添加右键菜单的方法
查看>>
自定义服务器控件(处理不同的浏览器)
查看>>
解决IE6-IE7下li上下间距
查看>>
聚集索引更新后会不会马上重新排序
查看>>
幸运大抽奖
查看>>
Post请求
查看>>