protected override void HandleOnUpdate() { for(int i = 0; i<OuterPolygon.Count; i++) { List<Vector2> union = PolygonAlgorithm.Combine(OuterPolygon[i], new List<List<Vector2>>() { InnerHole[i] }); if ((FaceType & Facing.FACE_BACK) == Facing.FACE_BACK) CalcFaceMeshData(union, ForceEarCut.ComputeTriangles(union), Facing.FACE_FORWARD, tinkness, ref vertices, ref normals, ref uv, ref triangles); if ((FaceType & Facing.FACE_BACK) == Facing.FACE_BACK) CalcFaceMeshData(union, ForceEarCut.ComputeTriangles(union), Facing.FACE_BACK, tinkness, ref vertices, ref normals, ref uv, ref triangles); } if(IsTinkness) { foreach (var outer in OuterPolygon) { //outer.Reverse(); CalcSideMeshData(outer, tinkness, ref vertices, ref normals, ref uv, ref triangles); } foreach (var inner in InnerHole) { CalcSideMeshData(inner, tinkness, ref vertices, ref normals, ref uv, ref triangles); } } }
public void OnUpdateMesh() { List <Vector3> verts = new List <Vector3>(); List <Vector2> uvs = new List <Vector2>(); List <int> tris = new List <int>(); List <Vector2> points = PolygonAlgorithm.Combine(_shape2D); List <int> triangles = ForceEarCut.ComputeTriangles(points); if ((facing & Facing.FACE_BACK) == Facing.FACE_BACK) { CalculateMeshData(points, triangles, Facing.FACE_BACK, _thickness, ref verts, ref uvs, ref tris); } if ((facing & Facing.FACE_FORWARD) == Facing.FACE_FORWARD) { CalculateMeshData(points, triangles, Facing.FACE_FORWARD, _thickness, ref verts, ref uvs, ref tris); } Mesh _mesh = GetComponent <MeshFilter>().sharedMesh; if (_mesh == null) { _mesh = new Mesh(); _mesh.name = "Face_Mesh"; GetComponent <MeshFilter>().mesh = _mesh; } _mesh.Clear(); _mesh.vertices = verts.ToArray(); _mesh.uv = uvs.ToArray(); _mesh.triangles = tris.ToArray(); _mesh.RecalculateNormals(); ; }