Unity通过脚本创建网格Mesh的方法

 更新时间:2022年04月08日 14:17:36   作者:AlphaIcarus  
Unity中的网格作为组件不能脱离物体单独存在,通过新建脚本来实现相关操作,本文重点给大家介绍Unity通过脚本创建网格Mesh的方法,感兴趣的朋友一起看看吧

1.创建一个带Mesh的物体

Unity中的网格作为组件不能脱离物体单独存在
新建脚本CreateMesh

public class CreateMesh: MonoBehaviour
{
    void Start()
    {
	    			//该方法会新建一个名为Mesh的GameObject,该物体上包含一个 MeshFilter 和一个 MeshRenderer
        GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
        gameObject.transform.localScale = new Vector3(30, 30, 1);//放大一点,避免到时候看不见
    }
}

然后将脚本搭载到场景中任意物体上
点击运行后场景出现名为Mesh的物体,包含MeshFilter MeshRenderer,也可自行添加组件

这里Mesh Filter中的Mesh为None
因为我们还没有创建Mesh

2.通过脚本创建Mesh

Unity中Mesh由顶点、三角面和UV坐标组成
如果我们创建一个正方形,需要先声明相应数组
修改Create Mesh

//public class CreateMesh: MonoBehaviour
//{
   // void Start()
    //{
        Vector3[] vertices = new Vector3[0];	//声明顶点数组
        Vector2[] uv = new Vector2[0];		    //声明uv向量
        int[] triangles = new int[0];		    //声明三角形数组
        Mesh mesh = new Mesh();				   //声明网格
	    //对网格进行赋值引用
        mesh.vertices = vertices;
        mesh.uv = uv;
        mesh.triangles = triangles;
        //GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
        //gameObject.transform.localScale = new Vector3(30, 30, 1);
		
	    //将新建物体的 MeshFilter 设为新建的 网格(Mesh)
        gameObject.GetComponent<MeshFilter>().mesh = mesh;
    //}
//}

这时运行后Mesh Filter 中 Mesh 不再是null,而是我们刚刚声明的 网格,只是这个网格还没有相应的数据

继续修改CreateMesh

//public class GameHandler5 : MonoBehaviour
//{
    //这里声明了一个材质,给它赋值一个带贴图的材质,不用材质也行
    public Material material;
    //void Start()
    //{
	//这里我们创建一个正方形网格,所以需要4个顶点、4个UV点和6条边
        Vector3[] vertices = new Vector3[4];	
        Vector2[] uv = new Vector2[4];
        int[] triangles = new int[6];
	//声明顶点的位置
        vertices[0] = new Vector3(0, 1);
        vertices[1] = new Vector3(1, 1);
        vertices[2] = new Vector3(0, 0);
        vertices[3] = new Vector3(1, 0);
	//声明UV的位置
        uv[0] = new Vector2(0, 1);
        uv[1] = new Vector2(1, 1);
        uv[2] = new Vector2(0, 0);
        uv[3] = new Vector2(1, 0);
	//声明三角边,这里三角边是根据上面的顶点来进行连接的,每三个顶点构成一个三角边
        //这里后面的int类型参数对应 vertices[]数组中的顶点
        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 2;
        triangles[3] = 2;
        triangles[4] = 1;
        triangles[5] = 3;
        //Mesh mesh = new Mesh();
	//将设置好的参数进行赋值
        mesh.vertices = vertices;
        mesh.uv = uv;
        mesh.triangles = triangles;
        //GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
        //gameObject.transform.localScale = new Vector3(30, 30, 1);
        //gameObject.GetComponent<MeshFilter>().mesh = mesh;
        gameObject.GetComponent<MeshRenderer>().material = material;
    }
}

这个正方形存在 4个顶点、分为两个三角形共 6 条边、和 4 顶点 UV
运行结果

 

图片很暗是因为场景中没有光照

到此这篇关于Unity通过脚本创建Mesh(网格)的文章就介绍到这了,更多相关Unity创建Mesh内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server存储过程在C#中调用的简单实现方法

    SQL Server存储过程在C#中调用的简单实现方法

    这篇文章主要给大家介绍了关于SQL Server存储过程在C#中调用的简单实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL Server存储过程具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • C# 最基础知识介绍--多态

    C# 最基础知识介绍--多态

    在本篇文章将对大家介绍得是在C#中最常用的几种概念,即:多态,下面文章内容将对大家详细介绍这几种常用得状态
    2021-09-09
  • C#获取指定年份第一个星期一具体日期的方法

    C#获取指定年份第一个星期一具体日期的方法

    这篇文章主要介绍了C#获取指定年份第一个星期一具体日期的方法,涉及C#日期与字符串操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • c# 操作word写入特殊字符的实例

    c# 操作word写入特殊字符的实例

    这篇文章主要介绍了c# 操作word写入特殊字符的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • WPF实现文字粒子闪烁动画效果

    WPF实现文字粒子闪烁动画效果

    这篇文章主要为大家详细介绍了WPF实现文字粒子闪烁动画效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • WPF实现自带触控键盘的文本框

    WPF实现自带触控键盘的文本框

    这篇文章实现了WPF自带触控键盘的文本框,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • C#实现的海盗分金算法实例

    C#实现的海盗分金算法实例

    这篇文章主要介绍了C#实现的海盗分金算法,结合具体实例形式分析了海盗分金算法的原理与C#相应实现技巧,需要的朋友可以参考下
    2017-07-07
  • WPF仿三星手机充电界面实现代码

    WPF仿三星手机充电界面实现代码

    这篇文章主要为大家详细介绍了WPF仿三星手机充电界面实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • C#制作网站挂机程序的实现示例

    C#制作网站挂机程序的实现示例

    本文主要介绍了C#制作网站挂机程序,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C#事件标准命名规则及说明(包括用作事件类型的委托命名)

    C#事件标准命名规则及说明(包括用作事件类型的委托命名)

    这篇文章主要介绍了C#事件标准命名规则及说明(包括用作事件类型的委托命名),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论