using UnityEngine; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; #endif namespace Kamgam.UIToolkitBlurredBackground { public static class Utils { public static void SmartDestroy(UnityEngine.Object obj) { if (obj == null) { return; } #if UNITY_EDITOR if (!Application.isPlaying) { GameObject.DestroyImmediate(obj); } else #endif { GameObject.Destroy(obj); } } public static void SmartDontDestroyOnLoad(GameObject go) { if (go == null) { return; } #if UNITY_EDITOR if (EditorApplication.isPlaying) { GameObject.DontDestroyOnLoad(go); } #else GameObject.DontDestroyOnLoad(go); #endif } private static List _tmpSceneObjects = new List(); public static List FindRootObjectsByType(bool includeInactive) where T : Component { var results = new List(); FindRootObjectsByType(includeInactive, results); return results; } /// /// A simple replacement for GameObject.FindObjectsOfType. It checks the ROOT objects in ALL opened or loaded scenes. /// /// /// A list that will be cleared and then filled with the results. /// public static void FindRootObjectsByType(bool includeInactive, IList results) where T : Component { if (results == null) { results = new List(); } else { results.Clear(); } for (int i = 0; i < UnityEngine.SceneManagement.SceneManager.sceneCount; i++) { var scene = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i); if (!scene.IsValid()) continue; scene.GetRootGameObjects(_tmpSceneObjects); foreach (var obj in _tmpSceneObjects) { var comp = obj.GetComponent(); if (comp == null) continue; if (!includeInactive && !comp.gameObject.activeInHierarchy) continue; results.Add(comp); } } } /// /// A simple replacement for GameObject.FindObjectsOfType. It checks the ROOT objects in ALL opened or loaded scenes. /// /// /// public static T FindRootObjectByType(bool includeInactive) where T : Component { for (int i = 0; i < UnityEngine.SceneManagement.SceneManager.sceneCount; i++) { var scene = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i); if (!scene.IsValid()) continue; if (!scene.isLoaded) continue; scene.GetRootGameObjects(_tmpSceneObjects); foreach (var obj in _tmpSceneObjects) { var comp = obj.GetComponent(); if (comp == null) continue; if (!includeInactive && !comp.gameObject.activeInHierarchy) continue; return comp; } } return default; } } }