Unity通过脚本创建网格Mesh的方法
作者:AlphaIcarus 时间:2023-02-26 23:38:00
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
运行结果
图片很暗是因为场景中没有光照
来源:https://www.cnblogs.com/AlphaIcarus/p/16116583.html
标签:Unity,网格,Mesh
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
JavaWeb如何实现禁用浏览器缓存
2021-09-13 01:27:45
C#下使用XmlDocument操作XML详解
2022-08-27 16:38:53
浅谈Ribbon、Feign和OpenFeign的区别
2022-12-21 15:40:27
![](https://img.aspxhome.com/file/2023/5/86055_0s.png)
OpenHarmony实现屏幕亮度动态调节方法详解
2022-01-13 18:24:08
java的main方法中调用spring的service方式
2023-03-29 00:12:16
java后台验证码生成的实现方法
2021-10-01 05:59:26
![](https://img.aspxhome.com/file/2023/3/125653_0s.png)
OpenTelemetry初识及调用链Trace详解
2021-08-03 12:37:14
![](https://img.aspxhome.com/file/2023/9/85549_0s.png)
浅谈Java内存区域划分和内存分配策略
2023-08-11 18:52:49
![](https://img.aspxhome.com/file/2023/6/58146_0s.png)
WCF实现的计算器功能实例
2022-05-07 23:17:12
![](https://img.aspxhome.com/file/2023/9/91259_0s.jpg)
Android开源AndroidSideMenu实现抽屉和侧滑菜单
2023-10-09 09:24:51
![](https://img.aspxhome.com/file/2023/2/111722_0s.jpg)
ibatis学习之搭建Java项目
2021-11-02 00:35:29
C#与PLC通讯的实现代码
2021-10-29 13:34:39
![](https://img.aspxhome.com/file/2023/0/111280_0s.png)
Java MultipartFile实现上传文件/上传图片
2022-04-19 07:07:19
Android使用自定义View实现360手机卫士波浪球进度的效果
2023-03-21 19:18:34
![](https://img.aspxhome.com/file/2023/0/137250_0s.gif)
浅谈Java封装、继承、多态特性
2023-10-09 13:59:35
![](https://img.aspxhome.com/file/2023/6/67626_0s.png)
Java中Prime算法的原理与实现详解
2022-06-11 23:16:29
![](https://img.aspxhome.com/file/2023/7/63667_0s.png)
C#中的Dialog对话框
2022-08-21 11:21:48
JavaWeb中的常用的请求传参注解说明
2023-06-19 03:12:06
![](https://img.aspxhome.com/file/2023/1/76201_0s.png)
Spark SQL配置及使用教程
2023-02-28 06:02:30
![](https://img.aspxhome.com/file/2023/7/64127_0s.png)
使用java springboot设计实现的图书管理系统(建议收藏)
2023-11-25 00:54:49
![](https://img.aspxhome.com/file/2023/8/59928_0s.jpg)