Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }