面板Mesh次要由四个点组成,这里生成的是双面Plane,所以须要四个点的坐标。
顶面顶点的程序如图,以p0点和p2点为对角线切割成两个三角面
代码如下
public class PlaneShape : Shape { private static readonly string _planeMeshName = "Plane Mesh";//mesh的名称 #region private members private float _xSize, _zSize; #endregion #region ctor public PlaneShape(float xSize,float zSize,MeshPivot meshPivot = MeshPivot.CENTER) : base(meshPivot, _planeMeshName) { _xSize = xSize; _zSize = zSize; _verticeOffset = GetVertexOffset(); } #endregion #region override functions /// <summary> /// 依据mesh中心点的地位,取得顶点地位的偏移量 /// </summary> /// <returns></returns> protected override Vector3 GetVertexOffset() { Vector3 offset; switch (_meshPivot) { case MeshPivot.CENTER: case MeshPivot.TOP: case MeshPivot.BOTTOM: offset = Vector3.zero; break; case MeshPivot.LEFT: offset = new Vector3(-_xSize, 0, 0) * 0.5f; break; case MeshPivot.RIGHT: offset = new Vector3(_xSize, 0, 0) * 0.5f; break; case MeshPivot.FRONT: offset = new Vector3(0, 0, _zSize) * 0.5f; break; case MeshPivot.BACK: offset = new Vector3(0, 0, -_zSize) * 0.5f; break; default: offset = Vector3.zero; break; } return offset; } /// <summary> /// 取得顶点的数据汇合 /// </summary> /// <returns></returns> protected override Vector3[] GetVertices() { var p0 = new Vector3(-_xSize, 0, -_zSize) * 0.5f - _verticeOffset;//左下 var p1 = new Vector3(-_xSize, 0, _zSize) * 0.5f - _verticeOffset;//左上 var p2 = new Vector3(_xSize, 0, _zSize) * 0.5f - _verticeOffset;//右上 var p3 = new Vector3(_xSize, 0, -_zSize) * 0.5f - _verticeOffset;//右下 return new Vector3[] { p0,p1,p2,p3, p3,p2,p1,p0 }; } /// <summary> /// 取得法线方向的数据汇合 /// </summary> /// <returns></returns> protected override Vector3[] GetNormals() { return new Vector3[] { Vector3.up,Vector3.up,Vector3.up,Vector3.up, Vector3.down,Vector3.down,Vector3.down,Vector3.down }; } /// <summary> /// 取得三角面顶点的索引 /// </summary> /// <returns></returns> protected override int[] GetTriangles() { return new int[] { 0,1,2,2,3,0, 4,5,6,6,7,4 }; } /// <summary> /// 取得UV坐标的数据汇合 /// </summary> /// <returns></returns> protected override Vector2[] GetUVs() { return new Vector2[] { new Vector2(0,0),new Vector2(0,1),new Vector2(1,1),new Vector2(1,0), new Vector2(0,0),new Vector2(0,1),new Vector2(1,1),new Vector2(1,0), }; } #endregion }