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.
101 lines
2.8 KiB
C#
101 lines
2.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|