using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public static class GameObjectExtensions { public static void SetActiveByTagRecursive(this GameObject root, string tag, bool enable) => root.ForAllChildren(child => { if (child.CompareTag(tag)) child.SetActive(enable); else SetActiveByTagRecursive(child, tag, enable); }); public static void DestroyAllChildren(this GameObject root) => root.ForAllChildren(child => GameObject.Destroy(child)); public static void SetActiveAllChildren(this GameObject root, bool active) => root.ForAllChildren(child => child.SetActive(active)); public static void ForAllChildren(this GameObject root, Action<GameObject> func_on_child) { for (int i = 0; i < root.transform.childCount; i++) func_on_child(root.transform.GetChild(i).gameObject); } public static GameObject GetNthChild(this GameObject root, IEnumerable<int> pos) { GameObject ret = root; foreach (var i in pos) ret = ret.transform.GetChild(i).gameObject; return ret; } }