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/3rd/StompyRobot/SRF/Scripts/Extensions/GameObjectExtensions.cs

101 lines
2.8 KiB
C#

2 months ago
namespace SRF
{
using UnityEngine;
public static class SRFGameObjectExtensions
{
public static T GetIComponent<T>(this GameObject t) where T : class
{
return t.GetComponent(typeof (T)) as T;
}
/// <summary>
/// Get the component T, or add it to the GameObject if none exists
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T GetComponentOrAdd<T>(this GameObject obj) where T : Component
{
var t = obj.GetComponent<T>();
if (t == null)
{
t = obj.AddComponent<T>();
}
return t;
}
/// <summary>
/// Removed component of type T if it exists on the GameObject
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
public static void RemoveComponentIfExists<T>(this GameObject obj) where T : Component
{
var t = obj.GetComponent<T>();
if (t != null)
{
Object.Destroy(t);
}
}
/// <summary>
/// Removed components of type T if it exists on the GameObject
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
public static void RemoveComponentsIfExists<T>(this GameObject obj) where T : Component
{
var t = obj.GetComponents<T>();
for (var i = 0; i < t.Length; i++)
{
Object.Destroy(t[i]);
}
}
/// <summary>
/// Set enabled property MonoBehaviour of type T if it exists
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="enable"></param>
/// <returns>True if the component exists</returns>
public static bool EnableComponentIfExists<T>(this GameObject obj, bool enable = true) where T : MonoBehaviour
{
var t = obj.GetComponent<T>();
if (t == null)
{
return false;
}
t.enabled = enable;
return true;
}
/// <summary>
/// Set the layer of a gameobject and all child objects
/// </summary>
/// <param name="o"></param>
/// <param name="layer"></param>
public static void SetLayerRecursive(this GameObject o, int layer)
{
SetLayerInternal(o.transform, layer);
}
private static void SetLayerInternal(Transform t, int layer)
{
t.gameObject.layer = layer;
foreach (Transform o in t)
{
SetLayerInternal(o, layer);
}
}
}
}