软件编程
位置:首页>> 软件编程>> C#编程>> Unity通过脚本创建网格Mesh的方法

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

作者:AlphaIcarus  发布时间:2023-02-26 23:38:00 

标签: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,也可自行添加组件

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

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

这里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,而是我们刚刚声明的 网格,只是这个网格还没有相应的数据

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

继续修改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的方法

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

来源:https://www.cnblogs.com/AlphaIcarus/p/16116583.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com