Ejemplo n.º 1
0
    private void INLINE_CombineMeshes(ref List <int> indexes, ref Mesh visibleMesh, ref Mesh colliderMesh)
    {
        int count = indexes.Count;

        if (count > 0)
        {
            CombineInstance[] visibleCI = new CombineInstance[count], colliderCI = new CombineInstance[count];
            Mesh m;
            BlockpartVisualizeInfo bvi;
            Matrix4x4 mtr;
            for (int i = 0; i < count; i++)
            {
                bvi = blockVisualizersList[indexes[i]];
                m   = MeshMaster.GetMesh(bvi.meshType, bvi.materialID);
                visibleCI[i].mesh      = m;
                visibleCI[i].transform = bvi.GetPositionMatrix();
                mtr = bvi.GetPositionMatrix();
                visibleCI[i].transform  = mtr;
                colliderCI[i].mesh      = bvi.meshType == MeshType.Quad ? m : MeshMaster.GetMeshColliderLink(bvi.meshType);
                colliderCI[i].transform = mtr;
            }

            visibleMesh.CombineMeshes(visibleCI, true); // все подмеши используют один материал
            colliderMesh.CombineMeshes(colliderCI);
        }
    }
Ejemplo n.º 2
0
    private void RedrawRenderer(MeshVisualizeInfo mvi)
    {
        GameObject g;

        renderers.TryGetValue(mvi, out g);
        if (g != null)
        {
            int n = blockVisualizersList.Count;
            if (n > 0)
            {
                var indexes = new List <int>();
                for (int i = 0; i < n; i++)
                {
                    if (blockVisualizersList[i].meshInfo == mvi)
                    {
                        indexes.Add(i);
                    }
                }

                n = indexes.Count;
                if (n > 0)
                {
                    CombineInstance[]      cir = new CombineInstance[n], cic = new CombineInstance[n];
                    BlockpartVisualizeInfo bvi;
                    Mesh      cm;
                    Matrix4x4 mtr;
                    for (int i = 0; i < n; i++)
                    {
                        bvi              = blockVisualizersList[indexes[i]];
                        cm               = MeshMaster.GetMesh(bvi.meshType, bvi.materialID);
                        cir[i].mesh      = cm;
                        mtr              = bvi.GetPositionMatrix();
                        cir[i].transform = mtr;
                        cic[i].mesh      = bvi.meshType == MeshType.Quad ? cm : MeshMaster.GetMeshColliderLink(bvi.meshType);
                        cic[i].transform = mtr;
                    }
                    cm = new Mesh();
                    cm.CombineMeshes(cir);
                    g.GetComponent <MeshFilter>().sharedMesh = cm;
                    cm = new Mesh();
                    cm.CombineMeshes(cic);
                    g.GetComponent <MeshCollider>().sharedMesh = cm;
                    if (PoolMaster.useIlluminationSystem)
                    {
                        g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination);
                    }
                    else
                    {
                        g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType);
                    }
                }
                else
                {
                    renderers.Remove(mvi);
                    Destroy(g);
                }
            }
        }
        else
        {
            CreateBlockpartsRenderer(mvi);
        }
    }