Unity 创建一些六边形网格

让人想犯罪 __ 提交于 2019-12-01 23:41:55

 


 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CreateMesh : MonoBehaviour
{
    public Material m_HexMaterial;

    List<Vector3> m_CenterList;
    List<Mesh> m_MeshsList;

    void Awake()
    {

        Create(Vector3.zero, 5, 8, 1.0f, 0f);
    }

    void Create(Vector3 origin, int row, int col, float radius, float interval)
    {
        m_CenterList = new List<Vector3>();
        m_MeshsList = new List<Mesh>();

        for (var i = 0; i < row; i++)
        {
            for (var j = 0; j < col; j++)
            {
                var x = origin.x + j * ((radius * 2) + interval);
                var z = origin.z + i * ((radius * 2) + interval);
                m_CenterList.Add(new Vector3(x, origin.y, z));
            }
        }

        var a = radius / 2.0f;
        var b = Mathf.Sqrt(3.0f) / 2.0f * radius;
        var c = radius;
        var v1 = new Vector3(-a, 0.0f, b);
        var v2 = new Vector3(a, 0.0f, b);
        var v3 = new Vector3(c, 0.0f, 0.0f);
        var v4 = new Vector3(a, 0.0f, -b);
        var v5 = new Vector3(-a, 0.0f, -b);
        var v6 = new Vector3(-c, 0.0f, 0.0f);
        var vertices = new List<Vector3>();
        vertices.Add(Vector3.zero);
        vertices.Add(v1);
        vertices.Add(v2);
        vertices.Add(v3);
        vertices.Add(v4);
        vertices.Add(v5);
        vertices.Add(v6);
        var triangles = new List<int>() {
            0, 1, 2,
            0, 2, 3,
            0, 3, 4,
            0, 4, 5,
            0, 5, 6,
            0, 6, 1
        };

        var mesh = new Mesh();
        mesh.vertices = vertices.ToArray();
        mesh.triangles = triangles.ToArray();

        foreach (var t in m_CenterList)
        {
            var go = new GameObject();
            go.transform.position = t;
            go.AddComponent<MeshFilter>().mesh = mesh;
            go.AddComponent<MeshRenderer>().material = GameObject.Instantiate(m_HexMaterial);
        }
    }

    void OnDrawGizmos()
    {
        //foreach (var t in m_CenterList)
        //{
        //    Gizmos.DrawSphere(t, 1);
        //}
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!