Как получить ссылку / добавить / отключить / удалить компонент из скрипта
Приветствую начинающих разработчиков Unity. В данной статье мы рассмотрим сразу четыре возможности, которые можно реализовать с компонентами объекта, через скрипт, а именно: получение ссылки на компонент, добавление компонента, отключение компонента и удаление компонента.
Давайте пройдёмся по порядку.
Получение ссылки на компонент
Предположим, у нас имеется переменная obj, которая хранит в себе ссылку на наш объект. И нам необходимо получить ссылку на компонент данного объекта, например, на компонент Rigidbody. Для этого воспользуемся методом GameObject.GetComponent.
Rigidbody _rb = obj.GetComponent();
Тепер в переменной _rb у нас имеется ссылка на компонент Rigidbody, объекта obj. Так же убедитесь в том, что компонент, на который вы хотите получить ссылку, добавлен к Вашему объекту, иначе данный код работать не будет.
Добавление компонента
Как и в предыдущем примере, предположим, у нас имеется переменная obj, которая хранит в себе ссылку на наш объект.
Там нам необходимо добавить компонент для нашего объекта. Для этого нам понадобится метод GameObject.AddComponent. Воспользуемся им, добавив компонент, например, Rigidbody:
Rigidbody _rb = obj.AddComponent();
Готово! К объекту obj мы добавили компонент Rigidbody, и в переменную _rb записали ссылку для её хранение. Но на самом деле хранить ссылку на добавленный компонент не обязательно, поэтому, Вы можете обойтись и без этого.
Отключение компонента
Отключение и включение компонента используется довольно часто, для временного отключения или включения его свойств.
Предположим, что у Вас имеется переменная _rb, которая хранит в себе ссылку на какой-либо компонент.
У любого компонента имеется свойство enabled, которое принимая значения true и false, включает и отключает компонент соответственно. Воспользуемся им:
_rb.enabled = true;
Данный код отключит Ваш компонет. А чтобы его опять включить, поменяйте значение true на false.
_rb.enabled = false;
Удаление компонента
Удаление компонента, пожалуй, самое простое из всех тем этой статьи. За удаление компонента отвечает метод Destroy.
Destroy(_rb);
Так же убедитесь, что в переменной _rb имеется ссылка на Ваш компонент, который Вы хотите удалить.
На этом всё, теперь Вы умеете работать с компонентами 🙂 Если остались вопросы, задавайте их в комментариях.
Отключение Игровых Объектов (GameObjects)
Если родительский объект деактивирован, его отключение также перезаписывает опцию activeSelf у всех его дочерних элементов, то есть вся иерархия объектов, от родителя до каждого его потомка, становится неактивной. Однако этот процесс не меняет значения свойства activeSelf у дочерних элементов, они вернутся в первоначальное состояние, как только родитель будет снова активирован. Это значит, что нельзя судить, активирован ли в данный момент объект на сцене, по его свойству activeSelf . Вместо него, нужно использовать свойство activeInHierarchy, которое принимает во внимание эффект перезаписывания от родителя.
Такое перезаписывающее поведение впервые появилось в Unity 4.0. В предыдущих версиях была функция под названием SetActiveRecursively , которую можно было использовать, чтобы активировать или деактивировать потомков данного родительского объекта. Однако эта функция отличалась тем, что параметр активации каждого потомка изменялся — можно было включать или отключать всю иерархию, но потомок не имел возможности “запомнить”, в каком состоянии он был изначально. Чтобы код предыдущих версий продолжал работать, SetActiveRecursively осталась и в API к 4.0, но использовать ее не рекомендуется, функция может быть исключена из API в будущем:-
// JavaScript function DeactivateChildren(g: GameObject, a: boolean) < g.activeSelf = a; for (var child: Transform in g.transform) < DeactivateChildren(child.gameObject, a); >> // C# void DeactivateChildren(GameObject g, bool a) < g.activeSelf = a; foreach (Transform child in g.transform) < DeactivateChildren(child.gameObject, a); >>
Unity как отключить компонент через скрипт
Doberman 26 фев 2017, 17:05
у меня вопрос по теме:
могу ли я из самого скрипта включать и выключать его на экземплярах префаба? VS ругается на мои попытки
Doberman UNец Сообщения: 5 Зарегистрирован: 08 фев 2017, 16:05
Re: Включение и отключение скрипта или компонента скриптом на C#
samana 26 фев 2017, 17:19
Doberman писал(а): могу ли я из самого скрипта включать и выключать его на экземплярах префаба?
Выключить получится напрямую, а включить обратно — нет. Включить можно будет только, если на этот скрипт есть у кого-то ссылка и он вызовет метод включения.
samana Адепт Сообщения: 4738 Зарегистрирован: 21 фев 2015, 13:00 Откуда: Днепропетровск
Сообщений: 4 • Страница 1 из 1
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
- Список форумов
- Техподдержка • Наша команда • Удалить cookies конференции • Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Как отключить скрипт GameObject через другой скрипт?
Понятно (наверное), что нужно сделать ссылку на объект, но enabled не принимает GameObject, а SetActive отключает только сам объект, скрипт остается рабочим, Какой есть выход?
- Вопрос задан более двух лет назад
- 821 просмотр
Комментировать
Решения вопроса 1
Программирование C#.
Если имеется ввиду отключить скрипт из другого обьекта, то:
обьект.GetComponent().enable = false;