Unity场景分页插件WorldStreamer⽀持⽆限⼤地图的解决⽅案
(⼆)
Terrain Streaming
可以⽤WorldCreator创建Tile地形,然后⽤WorldStreamer实现分块地图。⽐如10000*10000(16平⽅公⾥)的地形,需要1000*1000的100个地块。如果每次加载9个格⼦,那么同时载⼊的地块⼤⼩为3000*3000⼤⼩——⽐⼀次加载100000*10000要省掉 90%的数据——如果直接加载10000*10000估计Unity要跪了。似乎也可以500*500,加载25个地块(保证1000左右的视野),总体数量要更⼩⼀些,但是地图分块却更多了(400个)。
(⼀)基础设置
如果想要分页读取Terrain,需要先把⼤块Terrain处理成⼩块,我使⽤的是WorldCreator Pro(189美⾦,巨贵⽆⽐)可以直接搞定这⼀步。
下⾯就需要思考了:
(1)不使⽤MeshTerrain作为低模LOD,那么推荐3*3地表块,每个地表块的Size应该⽐FOV的最远距离⾼个10%左右,以尽量使玩家不会看到地形加载的过程。
(2)使⽤Ring模式和低模LOG,可以使⽤较多的Load Range。
分页查询插件
(3)纯MeshTerrain,通常⽤于移动游戏。
接下来的例⼦中我设置了⼀个6*6*500*500的地图分块,每个分块是⼀个500*500的Unity Terrain
注意每个分块的位置,应该是500的正数倍。
Streamer设置:
通常Terrain作为Major Streamer。如果还需要模型Terrain,那么其将设置为Minor Streamer,因为Major只能有⼀个。
把指定的SceneCollection Prefab赋值给Streamer,就完成了Streamer与Scene Clips之间的联动。
如果使⽤Unity Terrain,需要把Terrain Neighbour脚本添加到MajorStreamer对象,并关联他们。
(⼆)使⽤RingStreaming 和 MeshTerrain 作为Terrain的LOD
⾸先你需要⼀个插件叫做Terrain To Mesh(www.assetstore.unity3d/cn/#!/content/47276)有钱的请⽀持正版,没钱的可以去淘宝买个盗版……
这个后期效率更不上的时候,可以搞⼀搞:).前期先不弄了。
这段官⽅说了⼀堆废话,其实关键就是
MajorStreamer,不设置Ring Streamer,读取范围是 0~N
MinorStreamer,设置RingSteamer,外圈读取范围是0~M(M>N),内圈起始范围设置为N+1,确保外圈实际范围是N+1~M。也就是外圈低模和内圈⾼模,加起来是完整的,需要读取的地块。
(三)UnityTerrain优化议题
使⽤RingStreaming和低模Terrain,烘焙好的树⽊
看不见的Terrain Disable掉(⽐如背后的)可以使⽤TerrainCullingSystem
使⽤优化的树⽊管理⼯具:Critias Tree System
如果TextureStreaming出现问题,可以去设置"Async Upload Time Slice" 和 "Async Upload Buffer Size"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。