有些时候需要自定义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中的顶点有点相似,建模也是只做这些东西,之所以可以这样玩是有些模型网格什么的需要代码去生成,比如地形破坏,比如下图
该游戏是异星探险家,
又或者流体计算等等