Exemple #1
0
    public void FillMeshDivideMaterials(Transform transform, bool excludingChilds, bool destroyChildsFirst)
    {
        if (destroyChildsFirst)
        {
            destroyAllSubmeshContainer(transform);
        }
        if (!mC)
        {
            mC = transform.gameObject.GetComponent <MeshCollider>();
        }
        if (!mF)
        {
            mF = transform.gameObject.GetComponent <MeshFilter>();
        }
        if (!mR)
        {
            mR = transform.gameObject.GetComponent <MeshRenderer>();
        }

        if (mC.sharedMesh != null)
        {
            mC.sharedMesh.Clear();
        }
        mC.sharedMesh = null;
        if (mF.sharedMesh != null)
        {
            mF.sharedMesh.Clear();
        }

        mR.materials = new Material[0];

        if (excludingChilds)
        {
            tmpMaterialTriangles = materialTriangles;
        }
        else
        {
            tmpMaterialTriangles = CollectTriangles();
        }

        foreach (KeyValuePair <Material, List <Triangle> > kV in tmpMaterialTriangles)
        {
            // IS THIS CORRECT?! WE MIGHT LOSE A TRIANGLE...SO BETTER CHECK IT AGAIN
            int i = 0;
            while (i < kV.Value.Count)
            {
                Transform   submeshTransform   = createSubmeshContainerGameobject(transform, this.name + "SubMesh" + kV.Key.name + i);
                ModularMesh submeshModularMesh = new ModularMesh(this, this.name + "SubMesh" + kV.Key.name + i);
                if (i + 21666 < kV.Value.Count)
                {
                    submeshModularMesh.AddTriangles(kV.Value.GetRange(i, 21666), kV.Key);
                }
                else
                {
                    submeshModularMesh.AddTriangles(kV.Value.GetRange(i, kV.Value.Count - i), kV.Key);
                }
                submeshModularMesh.FillMesh(submeshTransform, false);

                i += 21666;
            }
        }
    }