Подключение GetComponent<Renderer>()

168
06 марта 2019, 05:30

Прохожу уроки по Unity и столкнулся с такой проблемой:

private Rigidbody2D rigidBody;
private Renderer renders;
void Start()
{
    rigidBody = GetComponent<Rigidbody2D>();
    renders = GetComponent<Renderer>();
    if (isLooping)
    {
        for(int i = 0; i < transform.childCount; i++)
        {
            Transform child = transform.GetChild(i);
            if (child.renderer != null)
            {
                backgroundPart.Add(child);
            }
        }
    }
}

В последнем if на 'renderer' вылазит ошибка: Component.renderer является устаревшим, используйте GetComponent(), сделал по аналогии с rigidbody2D, но если заменить 'renderer' не 'renders' тогда появляется другая ошибка: Transform не содержит определения для renders. В чем может быть причина? До: http://prntscr.com/l9qe51 После: http://prntscr.com/l9qe9f

Answer 1

Метод GetComponent<T>() - это метод класса MonoBehaviour. Он ищет на объекте, на котором висит, указанный вместо T класс.

Другими словами, в вашем случае вызывая renders = GetComponent<Renderer>(); - вы ищите на текущем объекте компонент Renderer и назначаете его в приватную переменную renders.

После этого вы начинаете в цикле перебирать все дочерние объекты. Вы получаете компонент Transform объекта в Transform child = transform.GetChild(i); после чего спрашиваете if (child.renderer != null). Т.е. вы спрашиваете у класса Transform не является ли его публичное поле renderer пустым.

Это устаревший код, который будет скоро выпилен и вам советуют использовать вместо него GetComponent<T>(). В вашем случае это бы выглядело следующим образом:

Transform child = transform.GetChild(i);
var childRenderer = child.GetComponent<Renderer>();
if (childRenderer  != null)
{
    backgroundPart.Add(child);
}

т.е. у каждого дочернего объекта вы пытаетесь через метод GetComponent() найти Renderer, если результат не равен null - объект добавляется в список.

READ ALSO
Получение данных из COM порта в Unity

Получение данных из COM порта в Unity

стоит задача получения данных из COM портаНаписал код на C# для консольного приложения прямо по инструкции на MSDN и всё замечательно работает

166
Обработка значения TimeSpan (языка C#) в C++

Обработка значения TimeSpan (языка C#) в C++

Задача: В приложении, написанном на C#, вводится значение времени в интервале [00:00:00, 24:00:00) и заносится в переменную типа TimeSpanЗатем это значение...

133
Как вывести уведомления в админке, при сохранении страницы wordpress?

Как вывести уведомления в админке, при сохранении страницы wordpress?

Необходимо вывести сообщение в админке wordpress при сохранении страницы, нашел отличный пример класса, но не могу заставить его работать, вот...

149