You are on page 1of 6

1. using System.

Collections;
2. using System.Collections.Generic;
3. using UnityEngine;
4.  
5. public class Chunk : MonoBehaviour {
6.     /*
7.     List<Vector3> vertices = new List<Vector3>();
8.     List<int> triangles = new List<int>();
9.     List<Vector2> uv = new List<Vector2>();
10.  
11.     enum BlockSide {
12.         TOP,
13.         NORTH,
14.         EAST,
15.         SOUTH,
16.         WEST,
17.         BOTTOM
18.     };
19.     */
20.  
21.     const int ChunkSize = 10;
22.  
23.     BlockType[,,] block = new BlockType[ChunkSize, ChunkSize, ChunkSize];
24.  
25.     //int numFaces = 0;
26.  
27.     [SerializeField]
28.     Material material;
29.  
30.     void Start() {
31.         BuidMesh();
32.     }
33.  
34.     void Update() {
35.        
36.     }
37.  
38.     void BuidMesh() {
39.         Mesh mesh = new Mesh();
40.  
41.         List<Vector3> vertices = new List<Vector3>();
42.         List<int> triangles = new List<int>();
43.         List<Vector2> uv = new List<Vector2>();
44.  
45.         for(int x = 0; x < ChunkSize; x++) {
46.             for(int y = 0; y < ChunkSize; y++) {
47.                 for(int z = 0; z < ChunkSize; z++) {
48.                     if(block[x, y, z] != BlockType.air) {
49.                         Vector3 blockPos = new Vector3(x, y, z);
50.  
51.                         int numFaces = 0;
52.  
53.                         if(block[x, y + 1, z] == BlockType.air) {
54.                             //GetVerts(BlockSide.TOP);
55.                             vertices.Add(new Vector3(0, 1, 0) + blockPos);
56.                             vertices.Add(new Vector3(0, 1, 1) + blockPos);
57.                             vertices.Add(new Vector3(1, 1, 1) + blockPos);
58.                             vertices.Add(new Vector3(1, 1, 0) + blockPos);
59.  
60.                             //numFaces++;
61.                         }
62.                         if(block[x, y, z + 1] == BlockType.air) {
63.                             //GetVerts(BlockSide.NORTH);
64.                             vertices.Add(new Vector3(1, 0, 1) + blockPos);
65.                             vertices.Add(new Vector3(1, 1, 1) + blockPos);
66.                             vertices.Add(new Vector3(0, 1, 1) + blockPos);
67.                             vertices.Add(new Vector3(0, 0, 1) + blockPos);
68.  
69.                             //numFaces++;
70.                         }
71.                         if(block[x + 1, y, z] == BlockType.air) {
72.                             //GetVerts(BlockSide.EAST);
73.                             vertices.Add(new Vector3(1, 0, 0) + blockPos);
74.                             vertices.Add(new Vector3(1, 1, 0) + blockPos);
75.                             vertices.Add(new Vector3(1, 1, 1) + blockPos);
76.                             vertices.Add(new Vector3(1, 0, 1) + blockPos);
77.  
78.                             //numFaces++;
79.                         }
80.                         if(block[x, y, z - 1] == BlockType.air) {
81.                             //GetVerts(BlockSide.SOUTH);
82.                             vertices.Add(new Vector3(0, 0, 0) + blockPos);
83.                             vertices.Add(new Vector3(0, 1, 0) + blockPos);
84.                             vertices.Add(new Vector3(1, 1, 0) + blockPos);
85.                             vertices.Add(new Vector3(1, 0, 0) + blockPos);
86.  
87.                             //numFaces++;
88.                         }
89.                         if(block[x - 1, y, z] == BlockType.air) {
90.                             //GetVerts(BlockSide.WEST);
91.                             vertices.Add(new Vector3(0, 0, 1) + blockPos);
92.                             vertices.Add(new Vector3(0, 1, 1) + blockPos);
93.                             vertices.Add(new Vector3(0, 1, 0) + blockPos);
94.                             vertices.Add(new Vector3(0, 0, 0) + blockPos);
95.  
96.                             //numFaces++;
97.                         }
98.                         if(block[x, y - 1, z] == BlockType.air) {
99.                             //GetVerts(BlockSide.BOTTOM);/
100.                             vertices.Add(new Vector3(0, 0, 1) + blockPos);
101.                             vertices.Add(new Vector3(0, 0, 0) + blockPos);
102.                             vertices.Add(new Vector3(1, 0, 0) + blockPos);
103.                             vertices.Add(new Vector3(1, 0, 1) + blockPos);
104.  
105.                             //numFaces++;
106.                         }
107.  
108.                         // Primeiro Triangulo
109.                         triangles.Add((numFaces * 4) + 0);
110.                         triangles.Add((numFaces * 4) + 1);
111.                         triangles.Add((numFaces * 4) + 2);
112.  
113.                         // Segundo Triangulo
114.                         triangles.Add((numFaces * 4) + 0);
115.                         triangles.Add((numFaces * 4) + 2);
116.                         triangles.Add((numFaces * 4) + 3);
117.  
118.                         numFaces++;
119.  
120.                         /*
121.                         int tl = vertices.Count - 4 * numFaces;
122.                         for(int i = 0; i < numFaces; i++) {
123.                             triangles.AddRange(new int[] {
124.                                 tl + i * 4,
125.                                 tl + i * 4 + 1,
126.                                 tl + i * 4 + 2,
127.                                 tl + i * 4,
128.                                 tl + i * 4 + 2,
129.                                 tl + i * 4 + 3
130.                             });
131.                         }
132.                         */
133.                     }
134.                 }
135.             }
136.         }
137.  
138.         mesh.vertices = vertices.ToArray();
139.         mesh.triangles = triangles.ToArray();
140.         mesh.uv = uv.ToArray();
141.  
142.         mesh.RecalculateNormals();
143.  
144.         MeshFilter meshFilter = (MeshFilter)this.gameObject.AddComponent(typeof(MeshFilter));
145.         meshFilter.mesh = mesh;
146.  
147.         MeshRenderer meshRenderer = (MeshRenderer)this.gameObject.AddComponent(typeof(MeshRenderer));
148.         meshRenderer.material = material;
149.     }
150.  
151.     /*
152.     void GetTris() {
153.         // Primeiro Triangulo
154.         triangles.Add((numFaces * 4) + 0);
155.         triangles.Add((numFaces * 4) + 1);
156.         triangles.Add((numFaces * 4) + 2);
157.  
158.         // Segundo Triangulo
159.         triangles.Add((numFaces * 4) + 0);
160.         triangles.Add((numFaces * 4) + 2);
161.         triangles.Add((numFaces * 4) + 3);
162.  
163.         numFaces++;
164.     }
165.  
166.     void GetVerts(BlockSide side) {
167.         GetTris();
168.  
169.         switch(side) {
170.             case BlockSide.TOP: {
171.                 vertices.Add(new Vector3(0, 1, 0));
172.                 vertices.Add(new Vector3(0, 1, 1));
173.                 vertices.Add(new Vector3(1, 1, 1));
174.                 vertices.Add(new Vector3(1, 1, 0));
175.  
176.                 break;
177.             }
178.             case BlockSide.NORTH: {
179.                 vertices.Add(new Vector3(1, 0, 1));
180.                 vertices.Add(new Vector3(1, 1, 1));
181.                 vertices.Add(new Vector3(0, 1, 1));
182.                 vertices.Add(new Vector3(0, 0, 1));
183.  
184.                 break;
185.             }
186.             case BlockSide.EAST: {
187.                 vertices.Add(new Vector3(1, 0, 0));
188.                 vertices.Add(new Vector3(1, 1, 0));
189.                 vertices.Add(new Vector3(1, 1, 1));
190.                 vertices.Add(new Vector3(1, 0, 1));
191.  
192.                 break;
193.             }
194.             case BlockSide.SOUTH: {
195.                 vertices.Add(new Vector3(0, 0, 0));
196.                 vertices.Add(new Vector3(0, 1, 0));
197.                 vertices.Add(new Vector3(1, 1, 0));
198.                 vertices.Add(new Vector3(1, 0, 0));
199.  
200.                 break;
201.             }
202.             case BlockSide.WEST: {
203.                 vertices.Add(new Vector3(0, 0, 1));
204.                 vertices.Add(new Vector3(0, 1, 1));
205.                 vertices.Add(new Vector3(0, 1, 0));
206.                 vertices.Add(new Vector3(0, 0, 0));
207.  
208.                 break;
209.             }
210.             case BlockSide.BOTTOM: {
211.                 vertices.Add(new Vector3(0, 0, 1));
212.                 vertices.Add(new Vector3(0, 0, 0));
213.                 vertices.Add(new Vector3(1, 0, 0));
214.                 vertices.Add(new Vector3(1, 0, 1));
215.  
216.                 break;
217.             }
218.         }
219.     }
220.     */
221. }
222.  
223. public enum BlockType {
224.     air,
225.     stone,
226.     grass,
227.     dirt
228. }

You might also like