예제 #1
0
        public static void GetStandardMaterial(BatchMeshRenderer source, Color color, Color emission)
        {
            UnityEngine.Profiling.Profiler.BeginSample("GetStandardMaterial");

            if (!SourceToClone.ContainsKey(source.SourceMaterial))
            {
                // We need to assign this source if it doesn't exist.
                SourceToClone.Add(source.SourceMaterial, new Dictionary <MaterialComparer, Material>());

                // We also add the source as a "clone" of itself. That way the original source is still used
                MaterialComparer sourceMaterialComparer = new MaterialComparer(source.SourceMaterial);
                SourceToClone[source.SourceMaterial].Add(sourceMaterialComparer, source.SourceMaterial);
            }

            Dictionary <MaterialComparer, Material> clones = SourceToClone[source.SourceMaterial];
            MaterialComparer currentMaterialComparer       = new MaterialComparer(source.Color, source.Emission);
            MaterialComparer newMaterialComparer           = new MaterialComparer(color, emission);

            if (currentMaterialComparer != newMaterialComparer)
            {
                if (!clones.ContainsKey(newMaterialComparer))
                {
                    Material clone = new Material(source.SourceMaterial);
                    clone.name = source.SourceMaterial.name + " " + newMaterialComparer.color.ToString();
                    clone.SetColor("_Color", newMaterialComparer.color);
                    clone.SetColor("_EmissionColor", newMaterialComparer.emission);
                    clones.Add(newMaterialComparer, clone);
                }

                source.CurrentMaterial = clones[newMaterialComparer];
            }

            UnityEngine.Profiling.Profiler.EndSample();
        }
예제 #2
0
        public bool RemoveMaterialContainer(BatchMeshRenderer materialContainer)
        {
            if (materialContainer.CurrentMaterial != null && CloneContainer.ContainsKey(materialContainer.CurrentMaterial))
            {
                if (CloneContainer[materialContainer.CurrentMaterial].Remove(materialContainer))
                {
                    BakeNeeded = true;
                    return(true);
                }
            }

            return(false);
        }
예제 #3
0
        public bool AddMaterialContainer(BatchMeshRenderer materialContainer)
        {
            if (materialContainer.CurrentMaterial != null)
            {
                if (!CloneContainer.ContainsKey(materialContainer.CurrentMaterial))
                {
                    CloneContainer.Add(materialContainer.CurrentMaterial, new HashSet <BatchMeshRenderer>());
                }

                if (!CloneContainer[materialContainer.CurrentMaterial].Contains(materialContainer))
                {
                    CloneContainer[materialContainer.CurrentMaterial].Add(materialContainer);
                    BakeNeeded = true;

                    return(true);
                }
            }

            return(false);
        }
예제 #4
0
 public static void GetStandardMaterial(BatchMeshRenderer source, Color color)
 {
     GetStandardMaterial(source, color, source.Emission);
 }
예제 #5
0
 public static void NewEmission(BatchMeshRenderer source, Color emission)
 {
     GetStandardMaterial(source, source.Color, emission);
 }