using System; namespace UnityEngine.UI.Extensions { public static class ExtensionMethods { public static T GetOrAddComponent(this GameObject child) where T : Component { T result = child.GetComponent(); if (result == null) { result = child.AddComponent(); } return result; } public static bool IsPrefab(this GameObject gameObject) { if (gameObject == null) { throw new ArgumentNullException(nameof(gameObject)); } return !gameObject.scene.IsValid() && !gameObject.scene.isLoaded && gameObject.GetInstanceID() >= 0 && // I noticed that ones with IDs under 0 were objects I didn't recognize !gameObject.hideFlags.HasFlag(HideFlags.HideInHierarchy); // I don't care about GameObjects *inside* prefabs, just the overall prefab. } /// /// Generic clamp method to limt a value between a range of values /// /// data type /// Value to clamp /// Minimum value /// Maximum value /// public static T Clamp(this T value, T min, T max) where T : IComparable { if (value.CompareTo(min) < 0) { value = min; } if (value.CompareTo(max) > 0) { value = max; } return value; } } }