private Mesh SimplifyMesh(Mesh mesh, float quality) { if (mesh.triangles.Length < 100) { return(mesh); } var DecimatedMesh = mesh; var meshSimplifier = new UnityMeshSimplifier.MeshSimplifier(); meshSimplifier.Initialize(DecimatedMesh); meshSimplifier.PreserveBorderEdges = true; meshSimplifier.MaxIterationCount = 500; meshSimplifier.SimplifyMesh(quality); meshSimplifier.EnableSmartLink = true; DecimatedMesh = meshSimplifier.ToMesh(); DecimatedMesh.RecalculateNormals(); DecimatedMesh.Optimize(); return(DecimatedMesh); }
private static SavedSpriteCollider GenerateSavedCollider(Vector2[] poly, float distance, float quality) { var collider = new SavedSpriteCollider(); ExtractMesh(poly, distance, out var verts, out var indices); var mesh = new Mesh(); mesh.SetVertices(verts); mesh.SetTriangles(indices, 0, true); mesh.RecalculateNormals(); mesh.Optimize(); var meshSimplifier = new UnityMeshSimplifier.MeshSimplifier(); meshSimplifier.Initialize(mesh); meshSimplifier.SimplifyMesh(quality); var destMesh = meshSimplifier.ToMesh(); collider.CollisionIndices = new List <int>(); collider.CollisionVertices = new List <Vector3>(); collider.CollisionVertices.AddRange(destMesh.vertices); collider.CollisionIndices.AddRange(destMesh.triangles); collider.CriticalRect = new Rect(Vector2.one * 0.5f, _defaultCriticalSize); return(collider); }