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