Программно отключить активность дочернего объекта [РЕШЕНО]

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Программно отключить активность дочернего объекта [РЕШЕНО]

Сообщение Андрей 10 окт 2011, 08:43

Здравствуйте. Прощу помощи.
У меня есть иерархия вложенных объектов в сцене. Мне нужно программно отключить активность только третьего в этом примере.

Изображение

Этот код1 не работает.
Синтаксис:
Используется csharp
//....
var  obj3 = GameObject.Find("GameObject3");
obj3.active = false;
//...


Этот код2 работает.
Синтаксис:
Используется csharp
//....
var  obj1 = GameObject.Find("GameObject1");
obj1.active = false;
//...


Но как я писал, мне нужно выключить только третий объект и я не могу найти способ как до него добраться чтобы выключить.
Буду очень благодарен за помощь.
Последний раз редактировалось Андрей 10 окт 2011, 11:17, всего редактировалось 2 раз(а).
Аватара пользователя
Андрей
UNIт
 
Сообщения: 89
Зарегистрирован: 06 окт 2011, 10:48

Re: Программно отключить активность дочернего объекта

Сообщение Neodrop 10 окт 2011, 09:05

Не важно третий он или двадцать пятый. В вашем коде важны только две вещи :
[V] Правильное написание имени объекта.
[V] Имя объекта должно быть уникально и не повторяться в сцене иначе, как двиг разберётся, какой из 5-10 "GameObject3" вы ищите?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Программно отключить активность дочернего объекта

Сообщение Neodrop 10 окт 2011, 09:08

Ах, да - ещё пунктик. Объект то вложенный. Значит нужно описать всю его иерархию :
Find("/GameObject1/GameObject2/GameObject3")

http://unity3d.com/support/documentatio ... .Find.html

Но вообще-то, это чуть ли не самый медленный метод на свете. Лучше ищите по тагу, если уж вообще искать приспичило.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Программно отключить активность дочернего объекта

Сообщение Order 10 окт 2011, 09:45

Лучше заранее найти в старте и пользоваться готовыми ссылками на ГО.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Программно отключить активность дочернего объекта

Сообщение seaman 10 окт 2011, 09:55

Если скрипт висит на GameObject1, то правильнее использовать Transform.Find Он ищет только среди детей, что, естественно, быстрее.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Программно отключить активность дочернего объекта

Сообщение Андрей 10 окт 2011, 10:58

Спасибо всем за ответы. Сделал для себя вывод - внимательно читать справку Unity3D, каждую фразу.

GameObject.Find
static function Find (name : String) : GameObject
Description

Finds a game object by name and returns it.

If no game object with name can be found, null is returned. If name contains a '/' character it will traverse the hierarchy like a path name. This function only returns active gameobjects.


Я не обратил внимание, что функция возвращает только активные объекты.. Получается, что если объект неактивный, то я получу null на выходе используя GameObject.Find.

Про вариант поиска с шаблоном "/../../.../" я знал, но у меня он отказывался работать по причине выше и я этот вариант забраковал и забыл написать, что я им пользовался. А ведь я им пользовался.

Я остановился на варианте назначить тег дочернему объекту и искать объект по этому тегу и имени. Кстати с тегами так же ситуация, объект должен быть изначально активным.

Спасибо, что меня ткнули носом и не поленились.
Аватара пользователя
Андрей
UNIт
 
Сообщения: 89
Зарегистрирован: 06 окт 2011, 10:48

Re: Программно отключить активность дочернего объекта [РЕШЕНО]

Сообщение burlak 10 окт 2011, 12:49

Эта система из 3-х объектов представляет собой единое целое? Какой объект отвечает за отключение третьего объекта?

Если это система, думаю правильнее всего создать скрипт для объекта верхнего (или последующего) уровня в котором явно указать нужный объект, ну и отключать/включать соответственно по прямой ссылке.
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19