Найти все ГО связанные с префабами... (ПОЛУРЕШЕНО)

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

Найти все ГО связанные с префабами... (ПОЛУРЕШЕНО)

Сообщение TimmyMulla 09 апр 2010, 18:25

Вот, господа, такой у меня странный вопрос возник: имеется ли возможность найти все объекты в сцене созданные из префабов?
Причем именно родителей (т.е. чтоб в список не попадали составные части (подчиненные объекты)).

Весь день сегодня на это убил - не могу найти способа :(

Буду рад совету али помощи.
Последний раз редактировалось TimmyMulla 10 апр 2010, 09:37, всего редактировалось 1 раз.
Аватара пользователя
TimmyMulla
UNец
 
Сообщения: 47
Зарегистрирован: 13 фев 2010, 10:07
Откуда: Екатеринбург

Re: Найти все ГО связанные с префабами...

Сообщение Neodrop 09 апр 2010, 19:47

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

Re: Найти все ГО связанные с префабами...

Сообщение TimmyMulla 10 апр 2010, 07:14

Жаль. Ладно, мы пойдем кривым путем.

Спасибо.
Аватара пользователя
TimmyMulla
UNец
 
Сообщения: 47
Зарегистрирован: 13 фев 2010, 10:07
Откуда: Екатеринбург

Re: Найти все ГО связанные с префабами...

Сообщение TimmyMulla 10 апр 2010, 09:36

Кривой путь пройден. Он реально кривой, но вдруг кому пригодится.

У меня в сцене все ГО-родители из префабов несут на себе скрипт ObjectData.cs (так надо :) ).
Так вот. Кривой путь оказался весьма простым:

Update: Немного подкорректировал скрипт

Синтаксис:
Используется csharp
Component[] ObjectList = FindObjectsOfType(typeof(ObjectData)) as Component[];

        if (ObjectList != null)
        {

            for (int i = 0; i < ObjectList.Length; i++)
            {
                Debug.Log(ObjectList[i].gameObject.name + "_" + i);
            }
        }

 


Одна проблема - функция FindObjectsOfType работает медленно...

Короче, для себя вопрос решил, а глобально, думаю, он еще открыт.
Аватара пользователя
TimmyMulla
UNец
 
Сообщения: 47
Зарегистрирован: 13 фев 2010, 10:07
Откуда: Екатеринбург

Re: Найти все ГО связанные с префабами... (ПОЛУРЕШЕНО)

Сообщение Robotron18 03 сен 2010, 16:36

Все зависит от того, когда необходимо производить поиск объектов. Если в рантайме и количество подгруженных префабов динамическое, то кривой путь единственный. Можно только порекомендовать оформить собственный Tag и присвоить его нужным префабам, поиск по тэгам побыстрее будет - FindGameObjectsWithTag.

По возможности надо уходить от поисков в пользу предварительной обработки моделей на момент импорта в Unity с целью оформления инишника с необходимыми данными. Потом в рантайме из инишника таскать что надо. OnPostprocessModel класс UnityEditor, скрипт размещать в папке Asset/Editor. У меня сложносоставная модель с кучей подгружаемых на нее объектов, заканчиваю тему по ее обработке, в рантайме даже на загрузке сцены шмалять иерархию для связок - жесть. Можно получить ведьмаковские тормоза на загрузке локаций. У кого аналогичные задачи - пишите, поделюсь. Заодно решил вопрос переоформления префаба при импорте моделей, ибо ручками запарился расставлять компоненты и их значения, т.к. Unity не апдейтит локаторы.

ЗЫ. Вот еще вариант к динамическом поиску в рантайме. При оформлении префабов в сцену скидывать ссылки на него в статик массив, а оттуда уже брать по необходимости. Префаб в рантайме есно грузится скриптом, так что пополнять массив можно без труда.
Robotron18
UNец
 
Сообщения: 40
Зарегистрирован: 25 июл 2010, 15:48


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

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

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