public static bool IsEnableToggleFromPropName(string prop_name) { string label, name; WFCommonUtility.FormatPropName(prop_name, out label, out name); return(IsEnableToggle(label, name)); }
public static void CleanUpProperties(CleanUpParameter param) { Undo.RecordObjects(param.materials, "WF cleanup materials"); foreach (Material material in param.materials) { if (material == null) { continue; } var props = ShaderSerializedProperty.AsList(material); // 無効になってる機能のプレフィックスを集める var delPrefix = new List <string>(); foreach (var p in props) { string label, name; WFCommonUtility.FormatPropName(p.name, out label, out name); if (label != null && name.ToLower() == "enable" && p.FloatValue == 0) { delPrefix.Add(label); } } var del_props = new HashSet <ShaderSerializedProperty>(); // プレフィックスに合致する設定値を消去 Predicate <ShaderSerializedProperty> predPrefix = p => { string label = WFCommonUtility.GetPrefixFromPropName(p.name); return(label != null && delPrefix.Contains(label)); }; props.FindAll(predPrefix) // ただしEnableToggle自体は初期化しない .Where(p => !WFCommonUtility.IsEnableToggleFromPropName(p.name)).ToList().ForEach(p => del_props.Add(p)); // 未使用の値を削除 Predicate <ShaderSerializedProperty> predUnused = p => param.resetUnused && !p.HasPropertyInShader; props.FindAll(predUnused).ForEach(p => 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); } }
private void CleanupProperties() { foreach (Material material in materials) { if (material == null) { continue; } var so = new SerializedObject(material); so.Update(); var saved = so.FindProperty("m_SavedProperties"); // 無効になってる機能のプレフィックスを集める var delPrefix = new List <string>(); { var prop = saved.FindPropertyRelative("m_Floats"); foreach (var p in ToPropertyList(prop)) { string label, name; WFCommonUtility.FormatPropName(p.name, out label, out name); if (label != null && name.ToLower() == "enable" && p.value.floatValue == 0) { delPrefix.Add(label); } } } // プレフィックスに合致する設定値を消去 Predicate <ShaderPropertyView> predPrefix = p => { string label, name; WFCommonUtility.FormatPropName(p.name, out label, out name); return(label != null && delPrefix.Contains(label)); }; DeleteProperties(saved.FindPropertyRelative("m_Colors"), predPrefix); DeleteProperties(saved.FindPropertyRelative("m_TexEnvs"), predPrefix); DeleteProperties(saved.FindPropertyRelative("m_Floats"), predPrefix); // 未使用の値を削除 Predicate <ShaderPropertyView> predUnused = p => reset_unused && !material.HasProperty(p.name); DeleteProperties(saved.FindPropertyRelative("m_Colors"), predUnused); DeleteProperties(saved.FindPropertyRelative("m_Floats"), predUnused); DeleteProperties(saved.FindPropertyRelative("m_TexEnvs"), predUnused); // キーワードクリア if (reset_keywords) { DeleteShaderKeyword(so.FindProperty("m_ShaderKeywords")); } // 反映 so.ApplyModifiedProperties(); EditorUtility.SetDirty(material); } }
/// <summary> /// プロパティ物理名からラベル文字列を抽出する。特殊な名称は辞書を参照してラベル文字列を返却する。 /// </summary> /// <param name="prop_name"></param> /// <returns></returns> public static string GetPrefixFromPropName(string prop_name) { string label = WFShaderDictionary.SpecialPropNameToLabelMap.GetValueOrNull(prop_name); if (label != null) { return(label); } string name; WFCommonUtility.FormatPropName(prop_name, out label, out name); return(label); }
private void CopyProperties(SerializedProperty src, SerializedProperty dst, List <string> prefix) { var dst_list = ToPropertyList(dst); foreach (var src_prop in ToPropertyList(src)) { string label, name; WFCommonUtility.FormatPropName(src_prop.name, out label, out name); if (label != null && prefix.Contains(label)) { var dst_prop = dst_list.Find(p => p.name == src_prop.name); if (dst_prop != null) { src_prop.CopyTo(dst_prop); } } } }