Unity自定义mesh绘制
有些时候需要自定义mesh来绘制目标模型图形什么的,可以代码控制,也可以通过shader去控制,这里介绍代码控制的方法:
基本思路是修改mesh的定点,三角 达到自定义的目的,和上上篇垂直UI.Text 显示异曲同工之处。
由于一个mesh是有顶点信息,和对应三角形组合而成。
如图中的一个Quad比如4个顶点,0,1,2,3 可以组合为2个三角形信息,三角形1由顶点0,1,2 三角形2由定点2,3,0组成 , 组成了一个面
4个顶点 和一个三角形,组合为了一个面
又比如如图的4个顶点,2个三角形生成这样的图形,组成了2个面
又比如4个顶点3个三角形生成这样的图形,组成了3个面。三角顺序 顺时针 才会是你想看的面的绘制 逆时针就是反面了
void OnDrawGizmos() { MeshFilter filter = this.GetComponent<MeshFilter>(); MeshRenderer render = this.GetComponent<MeshRenderer>(); var mesh = filter.mesh; var ts = this.GetComponentsInChildren<Transform>(); Vector3[] vers = new Vector3[ts.Length]; for (int i = 0; i < ts.Length; i++) { vers[i] = ts[i].position; } var tris = new int[] { 0, 1, 2, 0,1,3,1,2,3 }; // mesh.Clear(); mesh.vertices = vers; mesh.triangles = tris; mesh.RecalculateNormals(); mesh.RecalculateBounds(); this.GetComponent<MeshCollider>().sharedMesh = mesh; filter.mesh = mesh; }
和Lite2D engine中的顶点有点相似,建模也是只做这些东西,之所以可以这样玩是有些模型网格什么的需要代码去生成,比如地形破坏,比如下图
该游戏是异星探险家,
又或者流体计算等等