コード例 #1
0
        public static bool IsEnableToggleFromPropName(string prop_name)
        {
            string label, name;

            WFCommonUtility.FormatPropName(prop_name, out label, out name);
            return(IsEnableToggle(label, name));
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        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);
                    }
                }
            }
        }