Mesh 网格

一、什么是Mesh网格

        Mesh是模型的网格,通过点构成线,再由线构成三角形,最后由三角形构成面,然后通过材质来进行网格表面的表达,如阴影,贴图等。Unity除了ui的mesh,其他都需要MeshFilter来确定网格形状,通过Material以及MeshRenderer来进行网格渲染。

二 生成四边形Mesh代码

C#代码如下:

 

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

public class CreatMesh : MonoBehaviour
{

    void Start()
    {
        //添加网格过滤器
        gameObject.AddComponent<MeshFilter>();
        //添加网格渲染
        gameObject.AddComponent<MeshRenderer>();
        //添加网格碰撞器
        gameObject.AddComponent<MeshCollider>();
        //添加顶点坐标
        List<Vector3> vectors = new List<Vector3>()
        {
            new Vector3(0,0,0),
            new Vector3(0,0,10),
            new Vector3(10,0,10),
            new Vector3(10,0,0),
        };
        //按照顺时针的顺序添加绘制点
        List<int> ints = new List<int>()
        {
            0,1,2,
            0,2,3,
            0,3,2,
            0,2,1
        };
        Mesh mesh = new Mesh();
        //将两个集合转换为数组
        mesh.vertices = vectors.ToArray();
        mesh.triangles = ints.ToArray();
        GetComponent<MeshCollider>().sharedMesh = mesh;
        GetComponent<MeshFilter>().mesh = mesh;
        GetComponent<MeshRenderer>().material = Resources.Load<Material>("mat");
    }

    // Update is called once per frame
    void Update()
    {

    }
}

三 利用Mesh网格生成圆

代买如下:

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

public class CreatMesh : MonoBehaviour
{
    //把圆分成多少份
    public int n = 36;
    //圆的半径
    public int r = 3;
    void Start()
    {
        //每一份的弧度
        float angel = 2 * Mathf.PI / n;
        //存放uv左边的集合
        List<Vector2> uv = new List<Vector2>();
        //添加中心点
        uv.Add(new Vector2(0.5f, 0.5f));
        //存放顶点坐标的集合
        List<Vector3> vectors = new List<Vector3>();
        //存放绘制顺序的集合
        List<int> ints = new List<int>();
        //添加圆心
        vectors.Add(Vector3.zero);
        for (int i = 1; i < n + 1; i++)
        {
            //对边
            float x = Mathf.Sin(i * angel) * r;
            //邻边
            float y = Mathf.Cos(i * angel) * r;
            //计算uv坐标
            float uvx = (x + r) / (2 * r);
            float uvy = (y + r) / (2 * r);

            //添加顶点
            uv.Add(new Vector2(uvx, uvy));
            //添加每份三角的顶点坐标
            vectors.Add(new Vector3(x, 0, y));
            ints.Add(0);
            ints.Add(i);
            //判断最后一份三角
            if (i == n)
            {
                ints.Add(1);
            }
            else
            {
                ints.Add(i + 1);
            }

        }
        Mesh mesh = new Mesh();
        mesh.vertices = vectors.ToArray();
        mesh.triangles = ints.ToArray();
        mesh.uv = uv.ToArray();
        GetComponent<MeshFilter>().mesh = mesh;
        GetComponent<MeshCollider>().sharedMesh = mesh;
    }

    // Update is called once per frame
    void Update()
    {

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值