Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(一) | 您所在的位置:网站首页 › 葡萄糖有什么作用和功效 › Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(一) |
Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(一)
参考:WorldStreamer官方文档。 目标:将我自己的WorldManager与WorldStreamer结合,让WorldStreamer支持开放世界建筑系统。 一、原理 创建虚拟grid,将大世界分成小块管理。设置一个“参照点”(通常是Player,如果是RTS,则是Camera),当参照点足够接近某个虚拟格子,或碰到碰撞体时,将其异步加载进来。 块加载是可以分层处理的,分层的目的是为不同的物件提供不同的Grid粒度。比如地形,房屋,和房屋里的家具,等是需要不同的粒度的,放屋里的家具只有玩家里的足够近才有必要加载,而地形则需要在玩家能看到的时候,就加载,甚至如光照,声音,特效这些虚头巴脑的东西,也可以分层。这个系统也可以作为LOD来使用,当玩家离得足够远时,可以用简单的Mesh替代地形。这样做非常省CPU和内存,因为Unity的地形非常耗。分层使得分工合作成为可能,当然做独立游戏的时候就老子一个人,这个就懒得写了。 WorldStreamer牛逼的地方是在Build版本中,在Editor中使用WorldStreamer会导致一些烘焙,批处理操作转移到运行时,简单说就是很耗,可以临时关掉Unity的静态批次(static batching)解决这个问题,在Editor中DrawCall会增加,但是发布版本不会有问题。 二:准备 Work场景:拆分前的大世界 物件分类:分类。 GamePlay场景:存放各种不需要流处理的物件:Player,Camera,DirectionalLight,各种自定义的Managers。 注意点击Streamer.cs 面板上的Add Scenes To Build Scenes 否则,这些Grid场景是不会被加载的。 三、组件 ·SceneSplitter:从你的场景对象创建虚拟Grid和层。他也可以从虚拟Grid元素产生场景。在场景生成过程中,SceneSplitter也会产出SceneCollection 并以“SC_Prefix”.scenc命名。每个层都会有一个SceneColliction ·SceneCollections:保存场景信息,如Grid元素大小,世界大小等细节。不需要手动填写,这些数据在生成场景时,由sceneSplitter或者LocalAreaUpdater填写。 ·SceneObjects:与ScencCollenction连接,他们在生成场景时,由sceneSplitter或者LocalAreaUpdater生成或者刷新。 ·StreamerPrefabns(Major,Minor):持有并使用“SC+Prefix”在你的GameplayScene中。你的第一个Streamer应该是Major。他负责:场景,大物件(如果你不使用Terrains,所有的物件如果你只有一个层)所有其他的Streamer必须是Minor。 ·ColliderStreamers:他们持有当某些collider被碰触后需要读取的场景。 ·Collider_Stream_Manager:这是一个Prefab。赋予你流式读取场景物件通过ColliderStreamers。他也使你能够通过隐藏在Grid元素中的碰撞体,载入场景。他也可以让你产生“俄罗斯套娃”那样的场景管理,流式场景里面读取流式场景。(估计我用不到) ·LocalAreaUpdater:场景融合,读取局部场景,刷新,修改,移除已经分离的世界。允许多人同时编辑同一区域。 ·StreamerGUI:场景读取,传送,重生,时候用到的读取页面。 ·WorldMover。使用了“浮点数修复系统”重定位世界坐标。同时保存真实坐标与局部坐标的关联。这对已经spawn的对象和服务器通讯是很有用的。 ·PlayerMover。这个脚本用于移动Player到安全地带,直到初始化数据和读取/传送完成。 ·PlayerTeleport。这个对象负责管理传送点,重生点,可以为动态物件 ·ObjectgToMove:这个脚本在浮点修复系统重置位置时,持有非流式物件和角色之间的关联。 ·TerrainNeighbour:负责混合Terrain的边缘,Terrain必须有同步的LOD,否则,Terrain边缘将会有小洞。这玩意必须被放到游戏场景中。 ·TerrainCullingSystem:性能优化。 PhysicCullingSystem:物理优化。 ObjectParent:当拆分过程中需要分类时,这个脚本需要被附加到Hierarchy父节点上。 四、应用 (4.1)SceneSplitter 强烈建议在拆分的时候建议将相关内容拷贝到一个新的场景“Work”Scene,而那些常规内容,比如DirectionalLight,Player等放在GamePlayScene中。 ![]() ![]() posted on 2018-01-15 11:06 jiahuafu 阅读(5998) 评论(0) 编辑 收藏 举报 |
CopyRight 2018-2019 实验室设备网 版权所有 |