You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/Feel/MMTools/Tools/MMExtensions/MMGameObjectExtensions.cs

63 lines
1.8 KiB
C#

2 months ago
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
namespace MoreMountains.Tools
{
/// <summary>
/// Game object extensions
/// </summary>
public static class GameObjectExtensions
{
static List<Component> m_ComponentCache = new List<Component>();
/// <summary>
/// Grabs a component without allocating memory uselessly
/// </summary>
/// <param name="this"></param>
/// <param name="componentType"></param>
/// <returns></returns>
public static Component MMGetComponentNoAlloc(this GameObject @this, System.Type componentType)
{
@this.GetComponents(componentType, m_ComponentCache);
Component component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null;
m_ComponentCache.Clear();
return component;
}
/// <summary>
/// Grabs a component without allocating memory uselessly
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="this"></param>
/// <returns></returns>
public static T MMGetComponentNoAlloc<T>(this GameObject @this) where T : Component
{
@this.GetComponents(typeof(T), m_ComponentCache);
Component component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null;
m_ComponentCache.Clear();
return component as T;
}
/// <summary>
/// Grabs a component on the object, or on its children objects, or on a parent, or adds it to the object if none were found
/// </summary>
/// <param name="this"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T MMGetComponentAroundOrAdd<T>(this GameObject @this) where T : Component
{
T component = @this.GetComponentInChildren<T>(true);
if (component == null)
{
component = @this.GetComponentInParent<T>();
}
if (component == null)
{
component = @this.AddComponent<T>();
}
return component;
}
}
}