Mesh网格:如何画个平面

上次球都画了,这次画个平面,平面来说要比球简单一些:

uv也给出了,因为都是2D的,所以UV也比较简单

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

[ExecuteInEditMode]
[RequireComponent(typeof(MeshFilter),typeof(MeshRenderer))]
public class MeshPlan : MonoBehaviour
{
    
    [Header("XY轴顶点数量")]
    public int numbers;
    [Header("顶点密集程度")]
    public float verDistance;

    [HideInInspector]
    public Vector3[] Heightvertice;
    [HideInInspector]
    public Vector3[] vertices;
    private float nowWaveWidth;
    private Vector3 TouchPoint;
    void Update()
    {
        VerticesEdit();
        StartCoroutine(EditPlane());
    }
    void VerticesEdit()
    {
        Vector3 center = transform.TransformPoint(this.transform.position);
        vertices = new Vector3[numbers * numbers];
        for (int u = 0; u < numbers; u++)
        {//U代表高度层数
            //I代表每一层当前到哪了
            vertices[u * numbers] = new Vector3(center.x, center.y, center.z + u * verDistance);
            for (int i = 1; i < numbers; i++)
            {
                vertices[u * numbers + i] = new Vector3(vertices[u * numbers].x + i * verDistance, center.y, vertices[u * numbers].z);
            }
        }
    }
    IEnumerator EditPlane()
    {

        Heightvertice = new Vector3[numbers];
        for(int i=0;i<numbers;i++)
        {
            Heightvertice[i] = vertices[i * numbers];
        }
        int[] triangles = new int[(numbers - 1) * (numbers - 1) * 6];
        int use = (numbers - 1) * 6;
        for (int u = 0; u < numbers-1; u++)
        {
            for (int i = 0, n = (u + 1) * numbers, z = u * numbers; i < use; n++, z++, i += 6) 
            {
                triangles[u * use + i] = z + 1;
                triangles[u * use + i + 1] = z;
                triangles[u * use + i + 2] = n;
                triangles[u * use + i + 3] = n;
                triangles[u * use + i + 4] = n + 1;
                triangles[u * use + i + 5] = z + 1;
            }
        }
        float size = numbers * verDistance;
        Vector3[] normal = new Vector3[vertices.Length];
        Vector2[] uv = new Vector2[vertices.Length];
        for (int u = 0; u < numbers; u++) 
        {
            uv[u * numbers] = new Vector2(0, (float)u / numbers);
            normal[u * numbers] = Vector3.up;
            for (int i = 1; i < numbers; i++) 
            {
                uv[u * numbers + i] = new Vector2((float)i / numbers, uv[u * numbers].y);
                normal[u * numbers + i] = Vector3.up;
            }
        }
        Mesh Plane = new Mesh();
        Plane.vertices = vertices;
        Plane.triangles = triangles;
        Plane.uv = uv;
        Plane.normals = normal;
        Plane.name = "平面";
        this.GetComponent<MeshFilter>().mesh = Plane;
        yield return 0;
    }
}

这个就简单多了,实现效果也比较好

这是顶点密度达到100*100后的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值