using System; using System.IO; using Wwise.Wooduan.Editor; using UnityEditor; using UnityEngine; namespace Wwise.Wooduan.Tools { /// /// Update a serialized field by text from prefabs and scenes. /// internal class SerializedFieldUpdater : AkWooduanAssetSearcher { private MonoScript _script; private Type _type; private string _oldString; private string _newString; private void Upgrade(string filePath) { var go = AssetDatabase.LoadAssetAtPath(filePath); if (!go.GetComponentInChildren(_type)) return; var path = Path.Combine(Application.dataPath, filePath.Substring(7)); var text = File.ReadAllText(path); var newText = text.Replace(_oldString, _newString); if (text != newText) { AkWooduanScriptingTools.CheckoutLockedFile(path); File.WriteAllText(path, newText); EditorUtility.SetDirty(go); } } private void OnGUI() { GUILayout.BeginHorizontal(); GUILayout.Label("Script Class To Upgrade"); _script = EditorGUILayout.ObjectField(_script, typeof(MonoScript), false) as MonoScript; GUILayout.EndHorizontal(); _oldString = GUILayout.TextField("Old Field Name", _oldString); _newString = GUILayout.TextField("New Field Name", _newString); GUILayout.BeginHorizontal(); IncludeA = GUILayout.Toggle(IncludeA, "Search in prefabs"); IncludeB = GUILayout.Toggle(IncludeB, "Search in scenes"); GUILayout.EndHorizontal(); AkWooduanGuiDrawer.DisplaySearchPath(ref SearchPath); if (GUILayout.Button("Replace!")) Replace(); } private void Replace() { if (_script == null) { EditorUtility.DisplayDialog("Error", "Please Select a Script!", "OK"); } TotalCount = 0; _type = _script.GetClass(); if (IncludeA) FindFiles(Upgrade, "Upgrading Prefabs", "*.prefab"); if (IncludeB) FindFiles(Upgrade, "Upgrading Scenes", "*.unity"); AssetDatabase.SaveAssets(); EditorUtility.DisplayDialog("Finished", "Upgraded " + TotalCount + " Assets!", "OK"); } } }