Unity通过脚本创建Mesh(网格)
2022-04-08 14:05
1521 查看
##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】6.3 通过 C# 脚本创建和访问游戏对象
- 通过创建GameObject 改变Mesh进行网格绘制
- unity, 用脚本创建mesh
- Unity 通过Mesh网格渲染绘制图形与字体
- unity中利用mesh动态创建墙体
- 通过分析SQL脚本教你如何创建索引《原创》
- 通过SQL脚本创建计划任务!
- C# 脚本存在unsafe字段导致Unity编译不通过
- Unity 通过脚本修改源资源
- Unity教程之-合并(Combine)引用相同材质球的网格(Mesh)
- 通过Shell脚本将VSS项目批量创建并且提交迁移至Gitlab
- Unity创建脚本显示自己的名字以及时间
- 关于Unity中Mesh网格的详解
- unity 3D学习日记:创建一个小场景并编写简单C#移动脚本
- unity 网格 怎么通过顶点了解面数 规则是什么
- Unity添加脚本的时候,自动创建版权信息
- Unity Mesh网格编程(一) Mesh编程入门知识 代码显示网格、顶点、面、UV、法线、切线
- 通过adb与python结合创建的设备驱动脚本deviceDriver.py
- 通过读取用户和密码文件自动创建用户脚本