Пример #1
0
    private void BurnDecal()
    {
        // If decal in scene exit
        if (EditorUtility.GetPrefabType(_decalType.gameObject) == PrefabType.ModelPrefab || EditorUtility.GetPrefabType(_decalType.gameObject) == PrefabType.Prefab)
        {
            return;
        }

        // Create meshes
        Plane[]      planes         = DecalCreator.CreatePlanes(_decalType);
        GameObject[] allGameObjects = FindObjectsOfType(typeof(GameObject)) as GameObject[];
        foreach (GameObject g in allGameObjects)
        {
            // Mask
            if (_decalType.i_projectionMask == 0)
            {
                continue;
            }
            if ((_decalType.i_projectionMask & MeshTypes.Mesh) == 0)
            {
                if (g.GetComponent <MeshFilter>())
                {
                    continue;
                }
            }
            if ((_decalType.i_projectionMask & MeshTypes.SkinedMesh) == 0)
            {
                if (g.GetComponent <SkinnedMeshRenderer>())
                {
                    continue;
                }
            }
            if (_decalType.i_ignoreList.Contains(g) || g.GetComponent <DecalType>())
            {
                continue;
            }

            CreateMeshList(planes, g);
        }

        if (_newMeshes.Count == 0)
        {
            return;
        }

        // Delete previous
        DestroyImmediate(_decalType.GetComponent <MeshFilter>().sharedMesh);
        Mesh combinedMesh = DecalCreator.CreateCombinedMesh(_newMeshes, null);

        DecalCreator.CreateStaticDecal(combinedMesh, null, _decalType);

        // Delete temp
        foreach (Mesh mesh in _newMeshes)
        {
            DestroyImmediate(mesh);
        }
        _newMeshes.Clear();
    }