66 lines
2.2 KiB
C#
66 lines
2.2 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
using Random = UnityEngine.Random;
|
|||
|
|
|||
|
namespace Test
|
|||
|
{
|
|||
|
[RequireComponent(typeof(MeshFilter)), RequireComponent(typeof(MeshRenderer))]
|
|||
|
public class TestMesh : MonoBehaviour
|
|||
|
{
|
|||
|
Mesh mesh;
|
|||
|
|
|||
|
private void Awake()
|
|||
|
{
|
|||
|
mesh = new Mesh();
|
|||
|
|
|||
|
// 定义顶点数组
|
|||
|
List<Vector3> vertices = new List<Vector3>();
|
|||
|
|
|||
|
// 定义三角形数组,每个三角形由三个顶点的索引组成
|
|||
|
List<int> triangles = new List<int>();
|
|||
|
List<Color> colors = new List<Color>();
|
|||
|
|
|||
|
for (int z = 0; z < 3; z++)
|
|||
|
{
|
|||
|
for (int x = 0; x < 3; x++)
|
|||
|
{
|
|||
|
var center = new Vector3(
|
|||
|
// (x + z * 0.5f - z / 2): x加上z的一半,再减去z的一半的整数值
|
|||
|
(x + z * 0.5f - z / 2) * (HexMetrics.innerRadius * 2f),
|
|||
|
0,
|
|||
|
HexMetrics.offset * z);
|
|||
|
|
|||
|
Color color = new Color(Random.Range(0,1f), Random.Range(0,1f), Random.Range(0,1f), 1);
|
|||
|
for (int i = 0; i < 6; i++)
|
|||
|
{
|
|||
|
var verticesCount = vertices.Count;
|
|||
|
vertices.Add(center);
|
|||
|
vertices.Add(center + HexMetrics.corners[i]);
|
|||
|
vertices.Add(center + HexMetrics.corners[i + 1]);
|
|||
|
|
|||
|
triangles.Add(verticesCount);
|
|||
|
triangles.Add(verticesCount + 1);
|
|||
|
triangles.Add(verticesCount + 2);
|
|||
|
colors.Add(color);
|
|||
|
colors.Add(color);
|
|||
|
colors.Add(color);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
mesh.vertices = vertices.ToArray();
|
|||
|
mesh.colors = colors.ToArray();
|
|||
|
mesh.triangles = triangles.ToArray();
|
|||
|
|
|||
|
// 计算法线
|
|||
|
mesh.RecalculateNormals();
|
|||
|
|
|||
|
GetComponent<MeshFilter>().mesh = mesh;
|
|||
|
// 为 MeshRenderer 指定材质
|
|||
|
// GetComponent<MeshRenderer>().material = new Material(Shader.Find("Standard"));
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|