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