Как получить массив детей объекта? [РЕШЕНО]

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

Как получить массив детей объекта? [РЕШЕНО]

Сообщение Valter 17 янв 2011, 08:59

Народ подскажите пожалуйста название функцию (Js), которая возвращает массив под объектов, заданного объекта. Т.е. есть корень в иерархии объектов, я посылаю его, получаю все объекты, которые входят в этот корень. Цель нужно объединить кости.
Ещё какая функция создаёт связь между костями и какая её разрывает.
По идее все эти функции должны быть в движке. Но если нет напишите, что их нет.
Благодарю за внимание.
Valter
UNец
 
Сообщения: 33
Зарегистрирован: 12 янв 2011, 18:51

Re: Нужно название функции

Сообщение Zaicheg 17 янв 2011, 09:02

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

Re: Нужно название функции

Сообщение Valter 17 янв 2011, 11:52

Посмотрел справку unity (версия 3.1), так вот там нет функции transform.GetChild.
transfrom.childCount - возвращает кол-во под объектов.
А где же, связать кости и разорвать связь? Такие функции вообще есть?
Valter
UNец
 
Сообщения: 33
Зарегистрирован: 12 янв 2011, 18:51

Re: Нужно название функции

Сообщение Paul Siberdt 17 янв 2011, 11:57

А где комментарий на GetComponentsInChildren? Разве не то самое? :)
Связать объекты - transform.parent = myParentTransform
Развязать - transform.parent = null
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Нужно название функции

Сообщение Zaicheg 17 янв 2011, 11:59

Посмотрел справку unity (версия 3.1), так вот там нет функции transform.GetChild.

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

Re: Нужно название функции

Сообщение Paul Siberdt 17 янв 2011, 12:00

А что делает метод? Возвращает первый попавшийся чилд?
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Нужно название функции

Сообщение Zaicheg 17 янв 2011, 12:05

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

Re: Нужно название функции

Сообщение Valter 17 янв 2011, 12:11

А где комментарий на GetComponentsInChildren? Разве не то самое?

Я просто разбирался с этой функцией. Пока одни ошибки.Стыдно спрашивать, но все же почему выдаёт ошибку о не совпадении типов (Cannot cast from source type to destination type), вот код:
Синтаксис:
Используется javascript
var bone_trans:Transform[];
bone_trans=gameObject.GetComponentsInChildren(Transform);
Valter
UNец
 
Сообщения: 33
Зарегистрирован: 12 янв 2011, 18:51

Re: Нужно название функции

Сообщение Paul Siberdt 17 янв 2011, 12:24

Кстати да, замечал такую хрень с трансформом, попробуйте массив не трансформовый создавать, а общекомпонентный.

var bone_trans:Component[];
bone_trans=gameObject.GetComponentsInChildren(Transform);


Таким макаром в массив попадут трансформы, что нам и надо.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Нужно название функции

Сообщение Valter 17 янв 2011, 12:29

Кстати да, замечал такую хрень с трансформом, попробуйте массив не трансформовый создавать, а общекомпонентный.

var bone_trans:Component[];
bone_trans=gameObject.GetComponentsInChildren(Transform);


Спасибо большое, помогло и за предыдущие посты тоже.
Valter
UNец
 
Сообщения: 33
Зарегистрирован: 12 янв 2011, 18:51

Re: Нужно название функции

Сообщение Paul Siberdt 17 янв 2011, 12:32

С Вашего позволения заменю название темы на более информативное и добавлю [Решено] :p
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как получить массив детей объекта? [РЕШЕНО]

Сообщение Zaicheg 17 янв 2011, 13:17

Что-то я не могу въехать как в UnityScript получить из GetComponentsInChildren массив Transform[].
В C# это делается так:
Transform[] bones = gameObject.GetComponentsInChildren<Transform>() as Transform[];
В US у меня это "as" редактор крашит.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как получить массив детей объекта? [РЕШЕНО]

Сообщение Paul Siberdt 17 янв 2011, 13:26

А эссов у жабе нету :p

var bone_trans:Component[] = gameObject.GetComponentsInChildren(Transform);
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как получить массив детей объекта? [РЕШЕНО]

Сообщение Neodrop 17 янв 2011, 13:52

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

Re: Как получить массив детей объекта? [РЕШЕНО]

Сообщение Valter 17 янв 2011, 14:01

Оказывается это не конец. Сделал всё, использовав эти функции. Но возник странный баг. Для чего всё мне это было нужно? Ответ: Чтобы сменить обмундирование герою, одев на него новую броню.
Логика такая: Кликнув на броню в инвентаре, запускается функция. Которая меняет положение и ротации всех костей костюма в соответствии с костями персонажа (костей равное количество и они абсолютно одинаковые, что у костюма, что у персонажа). После каждую кость персонажа делаю прородителем соответствующей кости костюма. Всё хорошо перемещается в окне редактора, но если окно максимизировать или запустить отбилденую версию, костюм становится прозрачным, как буд-то одна голова ходит. Есть предположение, что пока костюм не одет, его положение далеко под землей Y:-10.000 (чтобы игрок не увидел костюм, пока не наденет), движок выгружает текстуры, материалы костюма, а при перемещении обратно не загружает. Такая мысль возникла, т.к. в окне редактора, если не максимизировать часть окна "Game" все работает на ура. А вот если запустить билд или максимизировать окно "Game" (Maximize on Play), тоже в редакторе, то уже не работает. Может можно как-то программно обновить объект или перезагрузить? Или каким-то другим образом одеть костюм. Бывало у кого такое?
Valter
UNец
 
Сообщения: 33
Зарегистрирован: 12 янв 2011, 18:51

След.

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

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

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