SamsonGame/Assets/Sources/Feel/MMTools/Tools/MMExtensions/MMTransformExtensions.cs

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);
}
}
}
}