Exemplo n.º 1
0
    private void CombineMeshes(Queue <MeshFilter> filters
                               , byte area
                               , InputGeometryCompiler compiler
                               , ColliderHelper helper)
    {
        Queue <CombineInstance> combineInstances = new Queue <CombineInstance>();

        while (filters.Count != 0)
        {
            MeshFilter filter = filters.Dequeue();

            if (helper != null)
            {
                Collider collider = filter.GetComponent <Collider>();

                if (collider)
                {
                    CombineInstance ci;

                    if (helper.Get(collider, out ci))
                    {
                        combineInstances.Enqueue(ci);
                        continue;
                    }
                }
            }

            // Note: Null shared meshes were filtered out by the calling method.

            for (int subIndex = 0; subIndex < filter.sharedMesh.subMeshCount; ++subIndex)
            {
                CombineInstance combineInstance = new CombineInstance();
                combineInstance.mesh         = filter.sharedMesh;
                combineInstance.transform    = filter.transform.localToWorldMatrix;
                combineInstance.subMeshIndex = subIndex;

                combineInstances.Enqueue(combineInstance);
            }
        }

        MeshUtil.CombineMeshes(combineInstances, area, compiler);
    }