using System; using JetBrains.Annotations; using Omega.Tools; using UnityEngine; /// /// Класс содержащий расширения для GameObject`ов /// public static class GameObjectExtensions { /// /// Возвращает компонент, прикрепленный к объекту. Если экземпляр компонента заданного типа отсутствует на объекте /// то он будет добавлен к объекту. /// /// Игровой объект /// Тип компонента /// Экземпляр компонента /// Параметр >указывает на null /// Параметр >указывает на уничтоженный объект [NotNull] public static T MissingComponent([NotNull] this GameObject gameObject) where T : Component { if (ReferenceEquals(gameObject, null)) throw new NullReferenceException(nameof(gameObject)); if (!gameObject) throw new MissingReferenceException(nameof(gameObject)); return GameObjectUtility.MissingComponentWithoutChecks(gameObject); } /// /// Пытается найти объект на компоненте, если компонент найден вернет true а >будет указывать на найденный объект, /// в противном случае, вернет false, а >будет указывать на null /// /// Игровой объект /// Ссылка на найденный объект (null, если объект не найден) /// Тип компонента /// true - компонент найден, false - объект не найден /// Параметр >указывает на null /// Параметр >указывает на уничтоженный объект public static bool TryGetComponent([NotNull] this GameObject gameObject, [CanBeNull] out T component) where T : Component { if (ReferenceEquals(gameObject, null)) throw new ArgumentNullException(nameof(gameObject)); if (!gameObject) throw new MissingReferenceException(nameof(gameObject)); return GameObjectUtility.TryGetComponentWithoutChecks(gameObject, out component); } /// /// Возвращает всех потомков для игрового объекта /// /// Массив потомков /// Параметр >указывает на null /// Параметр >указывает на уничтоженный объект public static Transform[] GetChildes(this GameObject gameObject) { if (ReferenceEquals(gameObject, null)) throw new NullReferenceException(nameof(gameObject)); if (!gameObject) throw new MissingReferenceException(nameof(gameObject)); return TransformUtility.GetChildesWithoutChecks(gameObject.transform); } }