Страница 1 из 1

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

СообщениеДобавлено: 18 дек 2009, 13:46
Tolking
:) Что? Материться уже приготовились? А если он НЕ активен?

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

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

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

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

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

СообщениеДобавлено: 18 дек 2009, 14:13
Neodrop
Если неактивный объект не хранится как переменная, найти его невозможно.

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

СообщениеДобавлено: 18 дек 2009, 14:20
Zaicheg
Или даже так.

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

Хотя конечно проще всё это делать через переменные. Это всегда можно сделать. Однако, если интерес чисто академический, то вот.

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

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

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

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

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

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

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

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

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

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

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

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

ГО.

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

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

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

когда делается GameObject go= GameObject.Find("floor"); Уровень еще не загружен!!!

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

СообщениеДобавлено: 18 дек 2009, 15:12
Tolking
Да. Так оно и есть! Нифига себе засада! Кто нибуть попадал так? Как выходили из положения?

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

СообщениеДобавлено: 18 дек 2009, 16:24
Neodrop
А справку почитать пробовал? Тебе вот это ничего не говорит ? Application.isLoadingLevel :-?

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

СообщениеДобавлено: 23 дек 2009, 15:45
Tolking
Прикольная штука, но непонял как ее использовать грамотно :

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

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

То уровень не загружается вообще (поэтому может и неправ от-но отдельного треда)
Как использовать то?
Всякие Start в уровне, мне не подходят. Более того, когда там будут ГО нужно будет думать как их выключать, чтобы игровая логика не работала при загрузке в едитор...

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

СообщениеДобавлено: 23 дек 2009, 17:11
Neodrop
В коратину поставь свой вайл.