Unity3D手冊中介紹了兩種地形制作方法:
一、在SceneView中使用height tools直接繪制
二、使用外部工具制作的heightmaps
直接繪制地形很簡單,不過只適合小面積地圖的制作,對于真實游戲項目來說,這樣拉地形實在太復雜,一般我們都會使用外部工具,比如PS,比如max來制作高度圖,然后導出為一張灰度圖,在引擎中將其轉換為地形。
Unity3D也支持了這種做法,即導入HeightMap的方式,不過對HeightMap的格式有一個限定,必須是16bit的RAW格式灰度圖,但是除此之外手冊中再沒有更多的描述。
沒關系,Unity3D提供了將地形導出為HeightMap的方法,我們可以做一張小地圖將其導出來,看一看就知道了。
如下圖所示,將地形長寬高都設定為2個單位,地形精度設定為33,這個數值是能夠設置的最小值了。這樣就表示在一個單位內會有17個高度值,即16條邊。然后把這個地形導出為16bit Raw格式文件。
按照上面的數據,這個raw文件將會由33 * 33個16bit數據構成,所以文件大小應為 16 * 16 * 2 = 2178字節。導出來的文件也確實如此,證明我們的推斷是正確的。
注意這里的Heightmap Resolution一定是2的n次冪加1,至于為什么會這樣,找一個介紹HeightMap的文檔看一下就明白了。
既然驗證了我們的推斷是正確的,那試著在PS中創建一張HeightMap放到Unity3D中看看。我們創建的HeightMap大小為129 * 129象素,如果我們讓一個Unity3D單位由4個象素點構成,那么地圖大小則為 (129 – 1) / 4 = 32,即32 * 32,高度值不需要太大,高為12就夠了。
導入到Unity3D中后刷上一層Texture,再種上幾棵樹,最終的效果看上去是這樣:
還不錯,其實我沒這么好的藝術細胞,在PS里擺弄了半天后,還是決定到網上去找一張現成的HeightMap (囧)
好了,場景制作應該不會有大問題了,下一步,看看怎么放兩個會動的東西進去吧。