实时绘制一个Mesh作为地面

Panel

Unity自带的Panel作为地面存在问题:

  • 顶点数量较多
  • UV信息导致贴图角度不对(z轴反了) 因此需要自己绘制一个矩形作为地面。

绘制三角网格和矩形

    [Button("生成地图")]
    public void GenerateMap()
    {
        Mesh mesh = new Mesh();
        mesh.vertices = new Vector3[]
        {
            new Vector3(0,0,0),
            new Vector3(0,1,0),
            new Vector3(1,1,0)
        };
        mesh.triangles = new int[]
        {
            0,1,2
        };
        meshFilter.mesh = mesh;
    }

首先定义mesh中的顶点坐标,再定义顶点编号(绘制顺序),即可绘制(注意物体可见需要同时有meshRender和meshFilter两个组件),三个点一个三角面,两个三角面构成一个矩形。

alt

对生成Mesh单独封装后绘制矩形地面。

    public MeshRenderer meshRenderer;
    public MeshFilter meshFilter;
    public int mapWidth;
    public int mapHeight;
    /// <summary>
    /// 生成地图
    /// </summary>
    [Button("生成地图")]
    public void GenerateMap()
    {
        meshFilter.mesh = GenerateMapMesh(mapHeight, mapWidth);
    }

    private Mesh GenerateMapMesh(int height,int width)
    {
        Mesh mesh = new Mesh();
        mesh.vertices = new Vector3[]
        {
            new Vector3(0,0,0),
            new Vector3(0,0,height),
            new Vector3(width,0,height),
            new Vector3(width,0,0)
        };
        mesh.triangles = new int[]
        {
            0,1,2,
            0,2,3
        };
        return mesh;
    }