Exemple #1
0
 public CommandMaterial(List <GameObject> gobjects, MaterialValue value)
 {
     foreach (GameObject gobject in gobjects)
     {
         oldValues[gobject] = Utils.GetMaterialValue(gobject);
     }
     newValue = value;
 }
Exemple #2
0
        public static void SetMaterialValue(GameObject gobject, MaterialValue value)
        {
            Material opaqueMat = Resources.Load <Material>("Materials/ObjectOpaque");
            Material transpMat = Resources.Load <Material>("Materials/ObjectTransparent");

            MeshRenderer[] renderers = gobject.GetComponentsInChildren <MeshRenderer>();
            foreach (MeshRenderer renderer in renderers)
            {
                int        i            = 0;
                Material[] newMaterials = renderer.materials;
                foreach (Material oldMaterial in renderer.materials)
                {
                    bool previousMaterialWasTransparent = oldMaterial.HasProperty("_Opacity") && oldMaterial.GetFloat("_Opacity") < 0.99f;
                    bool newMaterialIsTransparent       = value.color.a < 1.0f;
                    if (previousMaterialWasTransparent != newMaterialIsTransparent)
                    {
                        // swap material type
                        if (newMaterialIsTransparent)
                        {
                            newMaterials[i] = new Material(transpMat);
                        }
                        else
                        {
                            newMaterials[i] = new Material(opaqueMat);
                        }
                    }
                    //else
                    //{
                    //    newMaterials[i] = oldMaterial;
                    //}

                    Material newMaterial = newMaterials[i++];

                    newMaterial.SetColor("_BaseColor", value.color);
                    if (newMaterial.HasProperty("_Opacity"))
                    {
                        newMaterial.SetFloat("_Opacity", value.color.a);
                    }
                    if (newMaterial.HasProperty("_Smoothness"))
                    {
                        newMaterial.SetFloat("_Smoothness", 1f - value.roughness);
                    }
                    else
                    {
                        newMaterial.SetFloat("_Roughness", value.roughness);
                    }
                    newMaterial.SetFloat("_Metallic", value.metallic);
                }
                renderer.materials = newMaterials; // set array
            }
        }
Exemple #3
0
        public static MaterialValue GetMaterialValue(GameObject gobject)
        {
            MeshRenderer  renderer = gobject.GetComponentInChildren <MeshRenderer>();
            MaterialValue value    = new MaterialValue();

            if (null != renderer)
            {
                value.color = renderer.material.GetColor("_BaseColor");
                if (renderer.material.HasProperty("_Smoothness"))
                {
                    value.roughness = 1f - renderer.material.GetFloat("_Smoothness");
                }
                else
                {
                    value.roughness = renderer.material.GetFloat("_Roughness");
                }
                value.metallic = renderer.material.GetFloat("_Metallic");
            }
            return(value);
        }
Exemple #4
0
 public static void SetObjectMaterialValue(GameObject gobject, MaterialValue materialValue)
 {
     SetAsNonImported(gobject);
     Instance.scene.SetObjectMaterialValue(gobject, materialValue);
 }
Exemple #5
0
 public void SetObjectMaterialValue(GameObject gobject, MaterialValue materialValue)
 {
     Utils.SetMaterialValue(gobject, materialValue);
 }
Exemple #6
0
 public void UpdateMaterial(MaterialValue value)
 {
     newValue = value;
 }
Exemple #7
0
 public CommandMaterial(GameObject gobject, MaterialValue value)
 {
     oldValues[gobject] = Utils.GetMaterialValue(gobject);
     newValue           = value;
 }