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