Unity自定义mesh绘制

原创
2017/09/29 15:03
阅读数 9.1K

有些时候需要自定义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中的顶点有点相似,建模也是只做这些东西,之所以可以这样玩是有些模型网格什么的需要代码去生成,比如地形破坏,比如下图

该游戏是异星探险家,

又或者流体计算等等

展开阅读全文
0
0 收藏
分享
加载中
实在不错,GetComponent写在 Awake()裏面好點
03/24 10:17
回复
举报
更多评论
打赏
1 评论
0 收藏
0
分享
返回顶部
顶部