110 lines
3.6 KiB
C#
110 lines
3.6 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.UI;
|
|
|
|
namespace MoreMountains.Tools
|
|
{
|
|
/// <summary>
|
|
/// Transform extensions
|
|
/// </summary>
|
|
public static class TransformExtensions
|
|
{
|
|
/// <summary>
|
|
/// Destroys a transform's children
|
|
/// </summary>
|
|
/// <param name="transform"></param>
|
|
public static void MMDestroyAllChildren(this Transform transform)
|
|
{
|
|
for (int t = transform.childCount - 1; t >= 0; t--)
|
|
{
|
|
if (Application.isPlaying)
|
|
{
|
|
UnityEngine.Object.Destroy(transform.GetChild(t).gameObject);
|
|
}
|
|
else
|
|
{
|
|
UnityEngine.Object.DestroyImmediate(transform.GetChild(t).gameObject);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Finds children by name, breadth first
|
|
/// </summary>
|
|
/// <param name="parent"></param>
|
|
/// <param name="transformName"></param>
|
|
/// <returns></returns>
|
|
public static Transform MMFindDeepChildBreadthFirst(this Transform parent, string transformName)
|
|
{
|
|
Queue<Transform> queue = new Queue<Transform>();
|
|
queue.Enqueue(parent);
|
|
while (queue.Count > 0)
|
|
{
|
|
Transform child = queue.Dequeue();
|
|
if (child.name == transformName)
|
|
{
|
|
return child;
|
|
}
|
|
foreach (Transform t in child)
|
|
{
|
|
queue.Enqueue(t);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Finds children by name, depth first
|
|
/// </summary>
|
|
/// <param name="parent"></param>
|
|
/// <param name="transformName"></param>
|
|
/// <returns></returns>
|
|
public static Transform MMFindDeepChildDepthFirst(this Transform parent, string transformName)
|
|
{
|
|
foreach (Transform child in parent)
|
|
{
|
|
if (child.name == transformName)
|
|
{
|
|
return child;
|
|
}
|
|
|
|
Transform result = child.MMFindDeepChildDepthFirst(transformName);
|
|
if (result != null)
|
|
{
|
|
return result;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Changes the layer of a transform and all its children to the new one
|
|
/// </summary>
|
|
/// <param name="transform"></param>
|
|
/// <param name="layerName"></param>
|
|
public static void ChangeLayersRecursively(this Transform transform, string layerName)
|
|
{
|
|
transform.gameObject.layer = LayerMask.NameToLayer(layerName);
|
|
foreach (Transform child in transform)
|
|
{
|
|
child.ChangeLayersRecursively(layerName);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Changes the layer of a transform and all its children to the new one
|
|
/// </summary>
|
|
/// <param name="transform"></param>
|
|
/// <param name="layerIndex"></param>
|
|
public static void ChangeLayersRecursively(this Transform transform, int layerIndex)
|
|
{
|
|
transform.gameObject.layer = layerIndex;
|
|
foreach (Transform child in transform)
|
|
{
|
|
child.ChangeLayersRecursively(layerIndex);
|
|
}
|
|
}
|
|
}
|
|
}
|