Skip to content
Snippets Groups Projects
GameObjectExtensions.cs 1.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 => {
    
    Marco Zimmer's avatar
    Marco Zimmer committed
                if (child.CompareTag(tag))
    
                    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);
    
    Marco Zimmer's avatar
    Marco Zimmer committed
        public static GameObject GetNthChild(this GameObject root, IEnumerable<int> pos)
    
    Marco Zimmer's avatar
    Marco Zimmer committed
        {
            GameObject ret = root;
            foreach (var i in pos)
                ret = ret.transform.GetChild(i).gameObject;
    
            return ret;
        }