Перейти к содержимому

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 имеется ссылка на Ваш компонент, который Вы хотите удалить.

На этом всё, теперь Вы умеете работать с компонентами 🙂 Если остались вопросы, задавайте их в комментариях.

Как отключать компонент RigidBody2D при помощи скрипта?

Как включать и отключать компонент RigidBody2D при помощи скрипта? Например объекты можно отключать setActive true или false. как это сделать с компонентом RigidBody2D?

Отслеживать
задан 25 апр 2020 в 6:59
1 4 4 бронзовых знака
gameObject.GetComponent().SetActive(false) попробовали?
25 апр 2020 в 13:50

RigidBody2D вроде не отключается, даже в инспекторе галочки нет. Но тип тело можно сделать кинетический.

25 апр 2020 в 14:29

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Надо прописать это gameObject.GetComponent().SetActive(false) . То есть всё практически как с объектами.

Отслеживать
ответ дан 19 авг 2021 в 19:40
693 2 2 серебряных знака 23 23 бронзовых знака

  • c#
  • unity3d
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

Сообщение отредактировал Ranger — Воскресенье, 05 Октября 2014, 17:13
частый гость
Сейчас нет на сайте
почти ветеран
Сейчас нет на сайте
постоянный участник
Сейчас нет на сайте

gameObject это если нужно выключить скрипт на котором висит сам скрипт, если нужно выключить элемент у другого объекта, то через переменую типа GameObject указываешь.

в скобках указываешь с чем именно тебе нужно связаться/обратится, например Rigidbody, или имя класса твоего скрипта и т.п.

почти ветеран
Сейчас нет на сайте

«scriptMainSceneС _myscript = gameObject.GetComponent();
_myscript.enabled = false;»

Добавлено (05.10.2014, 22:20)
———————————————
да и не будет работать в C# вот это:
«gameObject.getComponent().enabled = false;»
а это тем более «gameObject.getcomponent().enabled = false;»
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Сообщение отредактировал MANMANA — Воскресенье, 05 Октября 2014, 22:16

Разработка компьютерных игр. С чего начать? Это просто! С нуля до разработчика игр: как начать создавать свою игру. Заказать создание игры.

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

как выключить скрипт на обьекте из массива?
обьект указываю не я а команда GameObject.FindGameObjectsWithTag, даже если пройтись foreach либо for по обьектам то я не понимаю как именно обратится к скрипту?
я указываю ссылку на скрипт
ps = camera.GetComponent ();
camera, это массив, в этот массив автоматом добавляются камеры, обратится за выключением обьекта я знаю как, но как обратится к скрипту на обьекте из массива? в юнити документации ничего не понятно, хоть убей, просто скажите как обратится к скрипту обьекта из массива

  • Вопрос задан 29 мая 2023
  • 77 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2

GavriKos

GavriKos @GavriKos Куратор тега Unity

А причем тут документация юнити? Нужна документация по сишарпу. Гуглите как на сишарпе обратиться к элементу массива. Да да, я мог бы написать сразу ответ — но вы так ничему не научитесь!

И да, у вас снова ошибки в суждениях. Если camera это массив — то я в жизни не поверю что код camera.GetComponent скомпилируется. Потому что у массива не GetComponent.

Ответ написан 29 мая 2023
Shavadrius @Shavadrius

public static class ArrayExtensions < public static string Gotcha(this string[] array) < return String.Join(" ", array); >> class Program < static void Main(string[] args) < String[] array = new String[3] < "Если camera это массив - то", "я в жизни не поверю что код", "camera.GetComponent скомпилируется" >; Console.WriteLine(array.Gotcha()); > >

GavriKos

GavriKos @GavriKos Куратор тега Unity
Shavadrius, плохой пример 😉 Склеивать лучше через цикл для понимания

Nikcet

Ну во-первых, массив лучше именовать во множественном числе — так просто код очевиднее.
А во-вторых, скорее всего, вы заранее знаете индекс нужный камеры — по нему и обращайтесь к объекту, а у него уже ищите компонент PixelShader.

Ответ написан 29 мая 2023
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

c#

  • C#
  • +1 ещё

Как проверять столкновение префаба и UI панели в Unity?

  • 1 подписчик
  • 6 часов назад
  • 23 просмотра

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

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