@@ -21,6 +21,7 @@ public class HexMeshData
21
21
public List < Vector3 > vertices ;
22
22
public List < int > triangles ;
23
23
public List < Color > colors ;
24
+ public List < Vector2 > uv ;
24
25
public Vector3 [ ] corners ;
25
26
26
27
private float border = 0.25f ;
@@ -41,6 +42,7 @@ public HexMeshData(float radius, float border = 0.2f)
41
42
vertices = new List < Vector3 > ( ) ;
42
43
triangles = new List < int > ( ) ;
43
44
colors = new List < Color > ( ) ;
45
+ uv = new List < Vector2 > ( ) ;
44
46
corners = new [ ] {
45
47
new Vector3 ( 0f , 0f , outerRadius ) ,
46
48
new Vector3 ( innerRadius , 0f , 0.5f * outerRadius ) ,
@@ -83,6 +85,7 @@ public Mesh CreateMesh()
83
85
mesh . vertices = vertices . ToArray ( ) ;
84
86
mesh . triangles = triangles . ToArray ( ) ;
85
87
mesh . colors = colors . ToArray ( ) ;
88
+ mesh . uv = uv . ToArray ( ) ;
86
89
mesh . RecalculateNormals ( ) ;
87
90
return mesh ;
88
91
}
@@ -163,9 +166,9 @@ public static int GetNeighbor(int index, HexDirection hexDirection, int mapWidth
163
166
return y * mapWidth + x ;
164
167
}
165
168
166
- public static Mesh GenerateHexagonMesh ( float radius , int startX , int startY , int chunkWidth , int chunkHeight , int mapWidth , int mapHeight , float [ ] heightMap , Func < float , Color > colorFunction , Func < float , float > elevationFunction )
169
+ public static Mesh GenerateHexagonMesh ( float radius , float border , int startX , int startY , int chunkWidth , int chunkHeight , int mapWidth , int mapHeight , float [ ] heightMap , Func < float , Color > colorFunction , Func < float , float > elevationFunction )
167
170
{
168
- var meshData = new HexMeshData ( radius , 0.3f ) ;
171
+ var meshData = new HexMeshData ( radius , border ) ;
169
172
170
173
for ( int dy = 0 ; dy < chunkHeight && ( startY + dy ) < mapHeight ; dy ++ )
171
174
{
@@ -207,7 +210,8 @@ public static Mesh GenerateHexagonMesh(float radius, int startX, int startY, int
207
210
center . y = elevation ;
208
211
209
212
var color = colorFunction ? . Invoke ( heightMap [ index ] ) ?? Color . white ;
210
- AddTriangle ( meshData , center , neighborElevation , previousNeighborElevation , nextNeighborElevation , ( HexDirection ) direction , color ) ;
213
+ var uv = new Vector2 ( x / ( float ) mapWidth , y / ( float ) mapHeight ) ;
214
+ AddTriangle ( meshData , center , uv , neighborElevation , previousNeighborElevation , nextNeighborElevation , ( HexDirection ) direction , color ) ;
211
215
}
212
216
213
217
}
@@ -216,33 +220,33 @@ public static Mesh GenerateHexagonMesh(float radius, int startX, int startY, int
216
220
return meshData . CreateMesh ( ) ;
217
221
}
218
222
219
- private static void AddTriangle ( HexMeshData meshData , Vector3 center , float neighborElevation , float previousElevation , float nextElevation , HexDirection direction , Color color )
223
+ private static void AddTriangle ( HexMeshData meshData , Vector3 center , Vector3 uv , float neighborElevation , float previousElevation , float nextElevation , HexDirection direction , Color color )
220
224
{
221
225
var v1 = center ;
222
226
var v2 = center + meshData . GetFirstSolidCorner ( direction ) ;
223
227
var v3 = center + meshData . GetSecondSolidCorner ( direction ) ;
224
228
225
229
//Add inner solid triangle
226
- AddTriangle ( meshData , v1 , v2 , v3 , color ) ;
230
+ AddTriangle ( meshData , v1 , v2 , v3 , color , uv ) ;
227
231
228
232
//Add Quad To Fill Border Gap
229
233
var v4 = v2 + meshData . GetBridge ( direction ) ;
230
234
v4 . y = neighborElevation ;
231
235
var v5 = v3 + meshData . GetBridge ( direction ) ;
232
236
v5 . y = neighborElevation ;
233
- AddQuad ( meshData , v2 , v3 , v4 , v5 , color ) ;
237
+ AddQuad ( meshData , v2 , v3 , v4 , v5 , color , uv ) ;
234
238
235
239
//Add Triangles to fill gap on sides of quad
236
240
var v6 = center + meshData . GetFirstCorner ( direction ) ;
237
241
v6 . y = Mathf . Min ( neighborElevation , previousElevation ) ;
238
- AddTriangle ( meshData , v2 , v6 , v4 , color ) ;
242
+ AddTriangle ( meshData , v2 , v6 , v4 , color , uv ) ;
239
243
240
244
var v7 = center + meshData . GetSecondCorner ( direction ) ;
241
245
v7 . y = Mathf . Min ( neighborElevation , nextElevation ) ;
242
- AddTriangle ( meshData , v3 , v5 , v7 , color ) ;
246
+ AddTriangle ( meshData , v3 , v5 , v7 , color , uv ) ;
243
247
}
244
248
245
- private static void AddTriangle ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Color color )
249
+ private static void AddTriangle ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Color color , Vector3 uv )
246
250
{
247
251
var vertexIndex = meshData . vertices . Count ;
248
252
@@ -254,12 +258,16 @@ private static void AddTriangle(HexMeshData meshData, Vector3 v1, Vector3 v2, Ve
254
258
meshData . colors . Add ( color ) ;
255
259
meshData . colors . Add ( color ) ;
256
260
261
+ meshData . uv . Add ( uv ) ;
262
+ meshData . uv . Add ( uv ) ;
263
+ meshData . uv . Add ( uv ) ;
264
+
257
265
meshData . triangles . Add ( vertexIndex ) ;
258
266
meshData . triangles . Add ( vertexIndex + 1 ) ;
259
267
meshData . triangles . Add ( vertexIndex + 2 ) ;
260
268
}
261
269
262
- private static void AddQuad ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Vector3 v4 , Color color )
270
+ private static void AddQuad ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Vector3 v4 , Color color , Vector3 uv )
263
271
{
264
272
var vertexIndex = meshData . vertices . Count ;
265
273
@@ -273,6 +281,11 @@ private static void AddQuad(HexMeshData meshData, Vector3 v1, Vector3 v2, Vector
273
281
meshData . colors . Add ( color ) ;
274
282
meshData . colors . Add ( color ) ;
275
283
284
+ meshData . uv . Add ( uv ) ;
285
+ meshData . uv . Add ( uv ) ;
286
+ meshData . uv . Add ( uv ) ;
287
+ meshData . uv . Add ( uv ) ;
288
+
276
289
meshData . triangles . Add ( vertexIndex ) ;
277
290
meshData . triangles . Add ( vertexIndex + 2 ) ;
278
291
meshData . triangles . Add ( vertexIndex + 1 ) ;
0 commit comments