public static void CopyPropertyValueFromMaterial(MaterialProperty p, Material source) { switch (p.type) { case MaterialProperty.PropType.Float: case MaterialProperty.PropType.Range: float f = source.GetFloat(p.name); p.floatValue = f; string[] drawer = ShaderHelper.GetDrawer(p); if (drawer != null && drawer.Length > 1 && drawer[0] == "Toggle" && drawer[1] != "__") { ToggleKeyword(p, drawer[1], f == 1); } break; case MaterialProperty.PropType.Color: Color c = source.GetColor(p.name); p.colorValue = c; break; case MaterialProperty.PropType.Vector: Vector4 vector = source.GetVector(p.name); p.vectorValue = vector; break; case MaterialProperty.PropType.Texture: Texture t = source.GetTexture(p.name); Vector2 offset = source.GetTextureOffset(p.name); Vector2 scale = source.GetTextureScale(p.name); p.textureValue = t; p.textureScaleAndOffset = new Vector4(scale.x, scale.y, offset.x, offset.y); break; } }
public static void CopyPropertyValueToMaterial(MaterialProperty source, Material target) { switch (source.type) { case MaterialProperty.PropType.Float: case MaterialProperty.PropType.Range: float f = source.floatValue; target.SetFloat(source.name, f); string[] drawer = ShaderHelper.GetDrawer(source); if (drawer != null && drawer.Length > 1 && drawer[0] == "Toggle" && drawer[1] != "__") { ToggleKeyword(target, drawer[1], f == 1); } break; case MaterialProperty.PropType.Color: Color c = source.colorValue; target.SetColor(source.name, c); break; case MaterialProperty.PropType.Vector: Vector4 vector = source.vectorValue; target.SetVector(source.name, vector); break; case MaterialProperty.PropType.Texture: Texture t = source.textureValue; Vector4 scaleoffset = source.textureScaleAndOffset; target.SetTexture(source.name, t); target.SetTextureOffset(source.name, new Vector2(scaleoffset.z, scaleoffset.w)); target.SetTextureScale(source.name, new Vector2(scaleoffset.x, scaleoffset.y)); break; } }
public static void SetMaterialPropertyValue(MaterialProperty p, Material[] materials, string value) { if (p.type == MaterialProperty.PropType.Texture) { Texture tex = AssetDatabase.LoadAssetAtPath <Texture>(value); if (tex != null) { foreach (Material m in materials) { m.SetTexture(p.name, tex); } } } else if (p.type == MaterialProperty.PropType.Float || p.type == MaterialProperty.PropType.Range) { float f_value; if (float.TryParse(value, out f_value)) { p.floatValue = f_value; string[] drawer = ShaderHelper.GetDrawer(p); if (drawer != null && drawer.Length > 1 && drawer[0] == "Toggle" && drawer[1] != "__") { MaterialHelper.ToggleKeyword(p, drawer[1], f_value == 1); } } } else if (p.type == MaterialProperty.PropType.Vector) { string[] xyzw = value.Split(",".ToCharArray()); Vector4 vector = new Vector4(float.Parse(xyzw[0]), float.Parse(xyzw[1]), float.Parse(xyzw[2]), float.Parse(xyzw[3])); foreach (Material m in materials) { m.SetVector(p.name, vector); } } else if (p.type == MaterialProperty.PropType.Color) { Color col = Converter.stringToColor(value); foreach (Material m in materials) { m.SetColor(p.name, col); } } }