Пример #1
0
        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);
        }
Пример #2
0
        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);
        }