类mc地图设计
序言 ? ? ??
? ? ? ?公司的一個項目在開發(fā)mc類型的游戲,早期參照市面上一款類mc的游戲用的是固定大小地圖,而不是像mc是無限大小地圖,這樣可以把地圖做的很精美。但最近接到需求,需要把固定大小的地圖,改為無限大小的。地圖里很多模塊都是按照固定大小進行組織的,改起來很蛋疼。
地圖結(jié)構(gòu)
? ? ? ? 那么如何制作無限大地圖?可以地圖切分無數(shù)多個小的單元,把這些單元組裝起來就是個無限大的地圖,那么只需把視野內(nèi)的單元渲染出來就可以了。其實救是渲染出一個一個這種單元,將單元命名為chunk,一般大小為16\16\16。
地圖單元chunk
? ? ? ?首選看下chunk是如何組織數(shù)據(jù)的,在舊版的地圖中有著很多模塊,包括:方塊,水,點光源,時間等,大約有10個模塊。下一步把這些模塊都拆分成16 \16\16大小的單元,進行組織數(shù)據(jù)。然后把這些做成組件的形式加入chunk中。這樣一個chunk就包含著16\16\16范圍內(nèi)的全部數(shù)據(jù)。
地圖文件結(jié)構(gòu):
? ? ? ? 像舊版固定地圖,可以把地圖的信息全部存儲在一個文件中,但對于無線大的地圖,就無法這么做了。這里跟chunk一樣,會引入一個地圖文件單元region。每個region大小為256\256\256, 也就是每個region中存儲著16\16\16個chunk 的數(shù)據(jù)。然后根據(jù)人物的位置,動態(tài)的加載/保存這個文件。
人物視野:
? ? ? ?盡管地圖是無限大的,但不可能把所有數(shù)據(jù)都加載進內(nèi)存,而是只把視野內(nèi)的二手手機靚號出售數(shù)據(jù)加載好即可。用視野把地圖文件region和地圖數(shù)據(jù)chunk鏈接起來。每次視野變化,都從文件中讀取數(shù)據(jù),加載新chunk,保存舊的chunk數(shù)據(jù)。
地圖的系統(tǒng)
? ?上面我們已經(jīng)處理好了一個無限大地圖的數(shù)據(jù),然后把所有這些數(shù)據(jù)分門別類的組裝起來,使其變成一個地圖。這里引入了系統(tǒng)這個概念,每個系統(tǒng)操作組件,來實現(xiàn)一個功能。
總結(jié)
? ?ecs天然的適合這類無限大地圖,可以分門別類的針對每個系統(tǒng)進行優(yōu)化,調(diào)優(yōu)。相對與舊版的固定地圖,現(xiàn)在的結(jié)構(gòu)更加清晰,支持功能更多。整體性能也沒有增加。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
- 上一篇: 扒一扒安卓渲染原理
- 下一篇: 在unity2d同屏显示9千人