Суббота, 10 Апреля 2021, 18:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Доступ к children
Доступ к children
labinzevvДата: Воскресенье, 28 Февраля 2021, 18:27 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем привет. Такой вопрос:
Есть GameObject, на нем висит скрипт "S", в скрипте есть переменная public GameObject obj в которую добавлен объект "A" со сцены. При запуске проекта, к объекту "A" в children добавляется один из заспавненных(может быть любым) объектов "В" (при нажатии клавиши на клавиатуре). Так вот, каким образом можно получить доступ к объекту "В" из скрипта "S", чтобы можно было изменить его свойства из созданного мной метода в скрипте "S"?


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
Sanchez06Дата: Воскресенье, 28 Февраля 2021, 22:34 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Если у тебя скрипт В в единственном экземпляре, то можешь сделать GameObject.GetComponentInChildren(B)
labinzevvДата: Воскресенье, 28 Февраля 2021, 23:02 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата Sanchez06 ()
Если у тебя скрипт В в единственном экземпляре, то можешь сделать GameObject.GetComponentInChildren(B)


В том то и дело, что объектов В в сцену много спавнится и у них имя и тэг одинаковые, по этому нужно получить доступ именно к тому, который стал child объекту, который висит на public GameObject в скрипте


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
drcrackДата: Воскресенье, 28 Февраля 2021, 23:50 | Сообщение # 4
старожил
Сейчас на сайте
Цитата
В том то и дело, что объектов В в сцену много спавнится и у них имя и тэг одинаковые, по этому нужно получить доступ именно к тому, который стал child объекту, который висит на public GameObject в скрипте

Если внутри одного S может быть только один B, то ниче не меняется, просто делаешь
Код
var b = obj.GetComponentInChildren<B>();

Если B это просто обьект без скриптов, можно сделать тупее:
Код

var t = obj.transform;
var b = t.GetChild(t.childCount - 1).gameObject;


Сообщение отредактировал drcrack - Воскресенье, 28 Февраля 2021, 23:53
labinzevvДата: Понедельник, 01 Марта 2021, 02:03 | Сообщение # 5
частый гость
Сейчас нет на сайте
Цитата drcrack ()
Если внутри одного S может быть только один B, то ниче не меняется, просто делаешь
Код
var b = obj.GetComponentInChildren<B>();

Если B это просто обьект без скриптов, можно сделать тупее:
Код

var t = obj.transform;
var b = t.GetChild(t.childCount - 1).gameObject;


С этой частью вроде бы разобрался, нашел доступ к объекту B. Спасибо за помощь.
Теперь другая проблема возникла: Весь поиск происходит в Update, чтобы объект В менялся в реальном времени, и по этому пока объекта В нету в cild у объекта А, в логе постоянная ошибка "не найден объект cild". Нужно создать условие if, пока child нету, код внутри не выполняется. А вот как пишется это условие, не знаю...


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
drcrackДата: Понедельник, 01 Марта 2021, 10:06 | Сообщение # 6
старожил
Сейчас на сайте
Код
var b = ...
if(b) {
...
}
labinzevvДата: Понедельник, 01 Марта 2021, 16:29 | Сообщение # 7
частый гость
Сейчас нет на сайте
Цитата drcrack ()
var b = ...
if(b) {
...
}

Во! Точно! То что нужно! Оказалось элементарно). Спасибо за помощь!!!+


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Доступ к children
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг