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,所有的物件如果你只有一个层)所有其他的S
  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值