Доступ к children

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

Доступ к children

Сообщение labinzevvAlex 28 фев 2021, 17:58

Всем привет. Такой вопрос:
Есть GameObject, на нем висит скрипт "S", в скрипте есть переменная public GameObject obj в которую добавлен объект "A" со сцены. При запуске проекта, к объекту "A" в children добавляется один из заспавненных(может быть любым) объектов "В" (при нажатии клавиши на клавиатуре). Так вот, каким образом можно получить доступ к объекту "В" из скрипта "S", чтобы можно было изменить его свойства из созданного мной метода в скрипте "S"?
Последний раз редактировалось labinzevvAlex 28 фев 2021, 18:07, всего редактировалось 1 раз.
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Доступ к children

Сообщение ~AvA~ 28 фев 2021, 18:06

Варинтов может быть несколько..
Достаточно простым будет, что-то типа
obj.GetComponent<Trnasform>().GetChild(0) <- если B первый "ребёнок"
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

Re: Доступ к children

Сообщение labinzevvAlex 28 фев 2021, 18:17

~AvA~ писал(а):Варинтов может быть несколько..
Достаточно простым будет, что-то типа
obj.GetComponent<Trnasform>().GetChild(0) <- если B первый "ребёнок"


Пробовал этот вариант, но 1)до попадания объекта "В" в children, постоянно выдаёт ошибку отсутствия children 2) При таком поиске он цепляет в public GameObject не children а сам объект "А"

Ещё пробовал циклом for искать по тегу, но здесь не получается, потому что нужно указывать конкретный индекс объекта в массиве, например [0] а объектов в массив куча набивается, и угадать какой из них children не получится. А работать со всеми объектами в массиве из другого метода, на сколько я знаю нельзя (если всё таки можно, то это бы решило проблему).

Так же вариант с foreach - он находит этот объект "В" (выводит лог с его именем), а вот как дальше его из цикла получить - не знаю может кто подскажет?
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Доступ к children

Сообщение ~AvA~ 28 фев 2021, 20:17

Синтаксис:
Используется csharp
using UnityEngine;

public class TestScript : MonoBehaviour
{
    public Transform A;

    private void Update()
    {
        if (A.childCount == 0)
            return;
       
        Debug.Log(A.GetChild(0).name);
    }
}
 


Решил что проще написать код, чем пытаться объесянить )
Единственное, что изменил - это A ссылка на трансформ
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

Re: Доступ к children

Сообщение labinzevvAlex 28 фев 2021, 20:51

~AvA~ писал(а):
Синтаксис:
Используется csharp
using UnityEngine;

public class TestScript : MonoBehaviour
{
    public Transform A;

    private void Update()
    {
        if (A.childCount == 0)
            return;
       
        Debug.Log(A.GetChild(0).name);
    }
}
 


Решил что проще написать код, чем пытаться объесянить )
Единственное, что изменил - это A ссылка на трансформ


Можно немного подробнее, с чем вместе работает? Может быть ты прекратишь мои мучения:) А то уже голова от этой темы распухла...

Решено! Единственное, что изменил, if (A.childCount == 1) сменил 0 на 1 (детей у объекта 1) и добавил проверку if (A) во избежании ошибки при откреплении объекта из детей. Спасибо за помощь!
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 11