private static bool RenamePropNameWithoutUndo(Material[] mats, List <RelacePropertyName> replaceList) { if (replaceList.Count == 0) { return(false); } // 名称を全て変更 foreach (var propPair in replaceList) { if (propPair.after != null) { propPair.before.CopyTo(propPair.after); propPair.onAfterCopy(propPair.after); } else { propPair.before.Rename(propPair.afterName); propPair.onAfterCopy(propPair.before); } } // 保存 ShaderSerializedProperty.AllApplyPropertyChange(replaceList.Select(p => p.after)); // 旧プロパティは全て削除 foreach (var prop in replaceList.Where(p => p.after != null).Select(p => p.before)) { prop.Remove(); } // 保存 ShaderSerializedProperty.AllApplyPropertyChange(replaceList.Select(p => p.before)); return(true); }
private static void DeleteProperties(IEnumerable <ShaderSerializedProperty> props) { var del_names = new HashSet <string>(); foreach (var p in props) { del_names.Add(p.name); p.Remove(); } if (0 < del_names.Count) { var names = new List <string>(del_names); names.Sort(); UnityEngine.Debug.Log("[WF][Tool] Deleted Property: " + string.Join(", ", names.ToArray())); } ShaderSerializedProperty.AllApplyPropertyChange(props); }
public bool RenameOldNameProperties(UnityEngine.Object[] objlist) { var oldPropList = CreateOldNamePropertyList(objlist); // 名称を全て変更 foreach (var propPair in oldPropList) { if (propPair.Value != null) { propPair.Key.CopyTo(propPair.Value); } } // 保存 ShaderSerializedProperty.AllApplyPropertyChange(oldPropList.Values); // 旧プロパティは全て削除 foreach (var prop in oldPropList.Keys) { prop.Remove(); } // 保存 ShaderSerializedProperty.AllApplyPropertyChange(oldPropList.Keys); return(0 < oldPropList.Count); }
public static void ResetPropertiesWithoutUndo(ResetParameter param) { foreach (Material material in param.materials) { if (material == null) { continue; } var props = ShaderSerializedProperty.AsList(material); var del_props = new HashSet <ShaderSerializedProperty>(); // ColorのAlphaチャンネルのみ変更 foreach (var p in props) { if (p.HasPropertyInShader && p.Type == ShaderUtil.ShaderPropertyType.Color) { var c = p.ColorValue; c.a = 1; p.ColorValue = c; } } ShaderSerializedProperty.AllApplyPropertyChange(props); // 条件に合致するプロパティを削除 foreach (var p in props) { if (param.resetColor && p.Type == ShaderUtil.ShaderPropertyType.Color) { del_props.Add(p); } else if (param.resetFloat && p.Type == ShaderUtil.ShaderPropertyType.Float) { del_props.Add(p); } else if (param.resetTexture && p.Type == ShaderUtil.ShaderPropertyType.TexEnv) { del_props.Add(p); } else if (param.resetUnused && !p.HasPropertyInShader) { del_props.Add(p); } else if (param.resetLit && p.name.StartsWith("_GL_")) { del_props.Add(p); } else if (param.resetPrefixs.Contains(WFCommonUtility.GetPrefixFromPropName(p.name))) { del_props.Add(p); } } // 削除実行 DeleteProperties(del_props); // キーワードクリア if (param.resetKeywords) { foreach (var so in ShaderSerializedProperty.GetUniqueSerialObject(props)) { DeleteShaderKeyword(so); } } // キーワードを整理する WFCommonUtility.SetupShaderKeyword(material); // 反映 EditorUtility.SetDirty(material); } }