top of page

[翻譯]用Unity3D 建造一個Minecraft 世界! Part1 使用程式渲染網格

  • Oct 17, 2017
  • 2 min read

原文網址 : http://studentgamedev.blogspot.tw/2013/08/unity-voxel-tutorial-part-1-generating.html​ 我們不會從3D方塊開始,取而代之的我們會先學習網格(Mesh)的渲染、碰撞基本系統,本次將會建造一個程序化、且可以在遊戲內編輯的2D方塊。在這個episode裡我們會寫一些腳本來創造平面方塊。

        首先創造一個空的unity專案,我習慣從創建一有系統的資料夾來開始,不過這取決於你。開啟一個新場景(scene)並取名叫”RenderTest”,然後開啟一個新的腳本把它裝在Level資料夾裡並把它命名為”PolygonGenerator”。

接下來我們將要從使用Mesh Class開始學習建造網格的基礎。所以,在我們的新場景裡新增一個Game Object並添加Mesh Filter、Mesh Render、Mesh Collder,

再把剛剛建立 的”PolygonGenerator”加到GameObject上。 確保Game Object的座標是(0,0,10)並可以被預設相機所看到。

由於我們要使用list<>,所以必須先添加

”using System.Collection.Generic;”

現在定義下面的的變數

List<Vector3> newVertices = new List<Vertices3>();

這邊使用List(串列)的資料結構來儲存所有網格(mesh)裡的頂點座標(vertices)

List<int> newTriangles = new List<int>();

Triangle會告訴Unity如何建置每一塊網格(mesh)(建議朋友們可以先去看一下這篇文章,PO主講的很詳細,會讓你對接下來講到的概念更加的清楚)

List<Vector2> newUV = new List<Vector>();

UV 會告訴Unity 如何繪製每一塊多邊形

Mesh

一個網格組件裡面含有Vertices 、Triangle、UV(我會在下面提到,現階段還用不到)

你會看到一個粉紅色正方形

現在我們解釋一下這是怎麼運作的

簡單流程概括

第四行我們並定義了mesh,這意味著我們可以使用網格組件,並可以進入mesh filter,再來取得遊戲物件的的座標,來省略寫起來很長的 transform.position.x

如果你編譯這個程式碼,你將會看到它產生一個粉紅色方形,這個方塊的每一個角都是我們定義的頂點座標。現在記住一件事:unity裡的座標體系中X軸往左是正值,Y軸往下是負值。如果我們把遊戲物件的原點設在(0,0,0),那麼正方形的座標會長這樣(下圖)

方塊頂點座標

接下來我們要定義Triangle,少了這個步驟我們將沒辦法把點繪製成面,首先來解釋一下Triangle是如何連接這些點、如何連接每個面的。

你可能有聽說過3D建模中正方形是由兩個三角形所組成的,n多邊形由(n-2)*3個三角形組成,而三角形的繪製順序則定義了圖形的模樣。有了Mesh 這個類別我們創造一個三角形只要給他3個點(順時鐘繪製),這將會決定網格的面的方向(比方說從前面可以看到網格,從後看就看不到)。

Triangle的繪製順序如下圖,由於每繪製一個三角形需要知道期三個頂點的順序,所以繪製N個三角形及需要3*N個點的順序。

定義完頂點座標、繪製順序後還要再做一件事才能完整的把圖形渲染出來 : 我們必須把剛剛定義的頂點、triangles串列傳給mesh,讓渲染器把圖形顯示出來,但由於我們使用的是串列結構,所以必須先透過ToArray()方法將其轉回陣列結構,在把值傳給mesh。

最後RecalculateNormals ()方法會自動生成法線(也就是生成圖案),然後就是我們螢幕上的粉紅色方塊囉!

<to be continued>

參考資料: http://www.ceeger.com/Components/class-MeshFilter.html

http://www.jianshu.com/p/7cd99a05cfea

http://dreamtails.pixnet.net/blog/post/23947420-c%23-%E8%A3%A1list%E7%94%A8%E6%B3%95%EF%BC%8C%E6%9C%89%E9%BB%9E%E5%83%8F%E6%98%AF%E4%B8%8D%E7%94%A8%E5%AE%A3%E5%91%8A%E9%95%B7%E5%BA%A6%E7%9A%84%E9%99%A3%E5%88%97%28


 
 
 

Comments


bottom of page