实时绘制一个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两个组件),三个点一个三角面,两个三角面构成一个矩形。
对生成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;
}