Unity как отключить компонент через скрипт
Перейти к содержимому

Unity как отключить компонент через скрипт

  • автор:

Как получить ссылку / добавить / отключить / удалить компонент из скрипта

Приветствую начинающих разработчиков 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

motkot

Программирование C#.

Если имеется ввиду отключить скрипт из другого обьекта, то:

обьект.GetComponent().enable = false;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *