public CommandMaterial(List <GameObject> gobjects, MaterialValue value) { foreach (GameObject gobject in gobjects) { oldValues[gobject] = Utils.GetMaterialValue(gobject); } newValue = value; }
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 } }
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); }
public static void SetObjectMaterialValue(GameObject gobject, MaterialValue materialValue) { SetAsNonImported(gobject); Instance.scene.SetObjectMaterialValue(gobject, materialValue); }
public void SetObjectMaterialValue(GameObject gobject, MaterialValue materialValue) { Utils.SetMaterialValue(gobject, materialValue); }
public void UpdateMaterial(MaterialValue value) { newValue = value; }
public CommandMaterial(GameObject gobject, MaterialValue value) { oldValues[gobject] = Utils.GetMaterialValue(gobject); newValue = value; }