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. } } }