Как найти объект по имени?

Программирование на Юнити.

Как найти объект по имени?

Сообщение Tolking 18 дек 2009, 13:46

:) Что? Материться уже приготовились? А если он НЕ активен?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как найти объект по имени?

Сообщение Zaicheg 18 дек 2009, 14:04

Как вариант — неактивный объект хранить в пустом объекте, который остаётся активным. Затем ищем пустой объект по имени, активируем его дочерние объекты и делаем с ними всё, что необходимо. Если цель — не использование неактивных объектов, а учёт их количества, то просто считаем количество дочерних объектов (неактивные объекты тоже будут считаться, да).

Пока подумаю над более изящным решением.

P. S.: это если мы предполагаем, что поиск объектов на старте, сохранение их в переменные и последующая деактивация неприемлимы.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как найти объект по имени?

Сообщение Neodrop 18 дек 2009, 14:13

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

Re: Как найти объект по имени?

Сообщение Zaicheg 18 дек 2009, 14:20

Или даже так.

Раз деактивация после помещения объектов в переменные на старте невозможна, то это означает, что объекты деактивируются ещё на стадии редактирования сцены.
Значит, можно поместить их в один пустой объект и искать их там по имени через Transform.Find(). Он ищет неактивные объекты, да. Это будет удобнее предыдущего варианта.

Хотя конечно проще всё это делать через переменные. Это всегда можно сделать. Однако, если интерес чисто академический, то вот.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как найти объект по имени?

Сообщение Tolking 18 дек 2009, 14:32

Zaicheg писал(а): P. S.: это если мы предполагаем, что поиск объектов на старте, сохранение их в переменные и последующая деактивация неприемлимы.

Это неудобно, в первую очередь.

Кстати! Может я стормозил и неправильно понял что значит "Активный"? Если с рендера галочку снять объект становится неактивным? Почему еще GameObject.Find("floor"); может nill вернуть? (Имя скопировал из редактора объект не подчинен) Вообще в иерархии ГО видны или трансформы?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как найти объект по имени?

Сообщение Zaicheg 18 дек 2009, 14:36

Zaicheg писал(а): P. S.: это если мы предполагаем, что поиск объектов на старте, сохранение их в переменные и последующая деактивация неприемлимы.

Да вполне удобно. Повесил на все объекты, которые нужно сделать неактивными на старте, тег, нашёл по тегу, сохранил в массив. Если деактивировать надо по ходу дела, из скрипта, то дописывай в массив сразу при этом действии.

Кстати! Может я стормозил и неправильно понял что значит "Активный"? Если с рендера галочку снять объект становится неактивным?

Если снять галочку с рендера, то он не будет визуализироваться. Однако, все остальные компоненты на нём будут работать. GameObject.active в свою очередь вырубает все компоненты и исключает ГО из взаимодействия в сцене. Вроде бы )

Почему еще GameObject.Find("floor"); может nill вернуть? (Имя скопировал из редактора объект не подчинен)

Ну потому что неактивен объект, да.

Вообще в иерархии ГО видны или трансформы?

ГО.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как найти объект по имени?

Сообщение Tolking 18 дек 2009, 14:53

Ха! По-моему до меня дошло почему не ищется!
Код: Выделить всё
              Application.LoadLevel(fn[0]);
                LoadingLevel = false;
                LevelIsLoad = true;

                GameObject go= GameObject.Find("floor");
                go.renderer.enabled = true;

когда делается GameObject go= GameObject.Find("floor"); Уровень еще не загружен!!!
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как найти объект по имени?

Сообщение Tolking 18 дек 2009, 15:12

Да. Так оно и есть! Нифига себе засада! Кто нибуть попадал так? Как выходили из положения?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как найти объект по имени?

Сообщение Neodrop 18 дек 2009, 16:24

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

Re: Как найти объект по имени?

Сообщение Tolking 23 дек 2009, 15:45

Прикольная штука, но непонял как ее использовать грамотно :

По смыслу: Исходя из того что после Application.LoadLevel(fn[0]); Уровень загружается не сразу, делаю вывод, что грузится уровень отдельным тредом.(хотя может я и не прав) Мне после загрузки уровня нужно показать вспомогательную геометрию имея Application.isLoadingLevel понимаю, что нужно подождать пока уровень загрузится. Как подождать?

Если так: while (Application.isLoadingLevel)
{
}

То уровень не загружается вообще (поэтому может и неправ от-но отдельного треда)
Как использовать то?
Всякие Start в уровне, мне не подходят. Более того, когда там будут ГО нужно будет думать как их выключать, чтобы игровая логика не работала при загрузке в едитор...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как найти объект по имени?

Сообщение Neodrop 23 дек 2009, 17:11

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


Вернуться в Скрипты

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

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