static void UpdateAllBlackboards(BlackboardEditDelegate blackboardDelegate) { // Update GameObjects in all scenes List <string> sceneNames = FileUtility.SearchFiles(Application.dataPath, "*.unity"); foreach (string sceneName in sceneNames) { // Open scene EditorApplication.OpenScene(sceneName); // Get all GameObjects in the scene var objects = GameObject.FindObjectsOfType(typeof(GameObject)).Where(g => !AssetDatabase.Contains(g.GetInstanceID())).ToArray(); int objectsLength = objects.Length; for (int i = 0; i < objectsLength; i++) { var gameObject = objects[i] as GameObject; EditorUtility.DisplayProgressBar("Updating Scene:" + sceneName, gameObject.name, (float)(i + 1) / objectsLength); // Try to get a blackboard on the gameObject var blackboard = gameObject.GetComponent <InternalBlackboard>(); if (blackboard != null) { blackboardDelegate(blackboard, false); } } EditorApplication.SaveScene(); } // Update Prefabs List <string> prefabNames = FileUtility.SearchFiles(Application.dataPath, "*.prefab"); int dataPathLength = Application.dataPath.Length - 6; // 6 == "Assets".Length EditorApplication.NewScene(); for (int i = 0; i < prefabNames.Count; i++) { // Get the prefab var prefab = AssetDatabase.LoadAssetAtPath(prefabNames[i].Remove(0, dataPathLength), typeof(GameObject)) as GameObject; var prefabInstance = PrefabUtility.InstantiatePrefab(prefab) as GameObject; EditorUtility.DisplayProgressBar("Updating Prefab", prefab.name, (float)(i + 1) / prefabNames.Count); // Try to get a Blackboard in children foreach (InternalBlackboard blackboard in prefabInstance.GetComponentsInChildren <InternalBlackboard>(true)) { blackboardDelegate(blackboard, true); } PrefabUtility.ReplacePrefab(prefabInstance, prefab); } EditorUtility.ClearProgressBar(); }
static void UpdateAllBlackboards (BlackboardEditDelegate blackboardDelegate) { // Update GameObjects in all scenes List<string> sceneNames = FileUtility.SearchFiles (Application.dataPath, "*.unity"); foreach (string sceneName in sceneNames) { // Open scene EditorApplication.OpenScene(sceneName); // Get all GameObjects in the scene var objects = GameObject.FindObjectsOfType(typeof(GameObject)).Where(g => !AssetDatabase.Contains(g.GetInstanceID())).ToArray(); int objectsLength = objects.Length; for (int i = 0; i < objectsLength; i++) { var gameObject = objects[i] as GameObject; EditorUtility.DisplayProgressBar("Updating Scene:" + sceneName, gameObject.name, (float)(i + 1)/objectsLength); // Try to get a blackboard on the gameObject var blackboard = gameObject.GetComponent<InternalBlackboard>(); if (blackboard != null) { blackboardDelegate(blackboard, false); } } EditorApplication.SaveScene(); } // Update Prefabs List<string> prefabNames = FileUtility.SearchFiles (Application.dataPath, "*.prefab"); int dataPathLength = Application.dataPath.Length - 6; // 6 == "Assets".Length EditorApplication.NewScene(); for (int i = 0; i < prefabNames.Count; i++) { // Get the prefab var prefab = AssetDatabase.LoadAssetAtPath(prefabNames[i].Remove(0, dataPathLength), typeof(GameObject)) as GameObject; var prefabInstance = PrefabUtility.InstantiatePrefab(prefab) as GameObject; EditorUtility.DisplayProgressBar("Updating Prefab", prefab.name, (float)(i + 1)/prefabNames.Count); // Try to get a Blackboard in children foreach (InternalBlackboard blackboard in prefabInstance.GetComponentsInChildren<InternalBlackboard>(true)) { blackboardDelegate(blackboard, true); } PrefabUtility.ReplacePrefab(prefabInstance, prefab); } EditorUtility.ClearProgressBar(); }