Пример #1
0
        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;
            }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
 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);
         }
     }
 }