static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { foreach (string str in importedAssets) { DefinitionObject definition = AssetDatabase.LoadAssetAtPath <DefinitionObject>(str); if (definition != null) { UpdateDefinitions(); return; } } foreach (string str in deletedAssets) { if (str.Contains(".asset")) { int start = str.LastIndexOf("/") + 1; int end = str.IndexOf(".asset"); string name = str.Substring(start, end - start); // Check if it is contained if (DefineUtility.ContainsDefineSymbol(name.ToUpper())) { UpdateDefinitions(); return; } } } }
/// <summary> Gets all DefinitionObjects in the AssetDatabase. Pushes any changes to DefineUtility </summary> public static void UpdateDefinitions() { string[] guids = AssetDatabase.FindAssets("t:DefinitionObject"); List <DefinitionObject> defObjects = new List <DefinitionObject>(); for (int i = 0; i < guids.Length; i++) { string path = AssetDatabase.GUIDToAssetPath(guids[i]); defObjects.Add(AssetDatabase.LoadAssetAtPath <DefinitionObject>(path)); } string definitions = EditorPrefs.GetString(prefsKey, ""); List <string> savedDefs = new List <string>(definitions.Split(';')); // Handle those that exist. Added to new save file and define utility. string newSave = ""; for (int i = 0; i < defObjects.Count; i++) { // Convert name into something legit string defName = defObjects[i].name.ToUpper();; char[] chars = defName.ToCharArray(); for (int c = 0; c < chars.Length; c++) { if (!IsAllowedCharacter(chars[c])) { chars[c] = '_'; } } defName = new string(chars); defName = defName.Replace("__", "_"); defObjects[i].name = defName; // Add define symbol DefineUtility.AddDefineSymbol(defName); // Save, but no duplicates if (!newSave.Contains(defName)) { if (newSave != "") { newSave += ";"; } newSave += defName; } // Prevent removal if (savedDefs.Contains(defName)) { savedDefs.Remove(defName); } } // Handle all those saved, which are no longer in the assets. They are gone. for (int i = 0; i < savedDefs.Count; i++) { if (savedDefs[i] != "") { DefineUtility.RemoveDefineSymbol(savedDefs[i]); } } EditorPrefs.SetString(prefsKey, newSave); }