public static void copyProperties(CopyPropParameter param, bool undo) { if (param.materialSource == null) { return; } var src_props = new List <ShaderMaterialProperty>(); // Label経由とPrefix経由をどちらもPrefixにする var copy_target = new List <string>(WFShaderFunction.LabelToPrefix(param.labels.ToList())); copy_target.AddRange(param.prefixs); foreach (var src_prop in ShaderMaterialProperty.AsList(param.materialSource)) { string prefix = WFCommonUtility.GetPrefixFromPropName(src_prop.Name); if (prefix == null) { continue; } // Prefixの一致判定 if (copy_target.Any(prefix.Contains)) { if (!param.withoutTextures || src_prop.Type != ShaderUtil.ShaderPropertyType.TexEnv) { src_props.Add(src_prop); } } } if (src_props.Count == 0) { return; } if (undo) { Undo.RecordObjects(param.materialDestination, "WF copy materials"); } for (int i = 0; i < param.materialDestination.Length; i++) { var dst = param.materialDestination[i]; if (dst == null || dst == param.materialSource) { // コピー先とコピー元が同じ時もコピーしない continue; } var dst_props = ShaderMaterialProperty.AsDict(dst); // コピー if (CopyProperties(src_props, dst_props, param.onlyOverrideBuiltinTextures)) { // キーワードを整理する WFCommonUtility.SetupShaderKeyword(dst); // ダーティフラグを付ける EditorUtility.SetDirty(dst); } } AssetDatabase.SaveAssets(); }
public void SetActive(Material[] targets) { foreach (var mat in WFCommonUtility.AsMaterials(targets)) { // リセット foreach (var p in ShaderMaterialProperty.AsList(mat).Where(p => p.Name.StartsWith("_Mode"))) { mat.SetInt(p.Name, 0); } // セット mat.SetInt(propertyName, value); } }
public void CopyProperties(CopyPropParameter param) { if (param.materialSource == null) { return; } var src_props = new List <ShaderMaterialProperty>(); var copy_target = WFShaderFunction.LabelToPrefix(param.functions.ToList()); foreach (var src_prop in ShaderMaterialProperty.AsList(param.materialSource)) { string label = WFCommonUtility.GetPrefixFromPropName(src_prop.Name); if (label == null) { continue; } // ラベルの一致判定 if (copy_target.Any(label.Contains)) { src_props.Add(src_prop); } } if (src_props.Count == 0) { return; } for (int i = 0; i < param.materialDestination.Length; i++) { var dst = param.materialDestination[i]; if (dst == null || dst == param.materialSource) // コピー先とコピー元が同じ時もコピーしない { continue; } var dst_props = ShaderMaterialProperty.AsDict(dst); // コピー if (CopyProperties(src_props, dst_props)) { EditorUtility.SetDirty(dst); } } AssetDatabase.SaveAssets(); }