Оптимизация строчки

178
22 апреля 2018, 20:48

Имеется строчка:

gameObject.transform.GetChild(0).GetChild(1).GetChild(0).GetComponent<Image>().sprite = L_Pan;

Мне не нравится часть с повторением GetChild(). Можно ли это оптимизировать?

Скриншот из Unity для понимания ситуации:

Answer 1

Намного лучше будет сделать в вашем скрипте сериализуемое поле (объявив его с модификатором доступа public, либо с использованием атрибута SerializeField), тогда в инспекторе объекта на котором будет ваш скрипт появится поле, в которе вы сможете установить нужный объект (который вы ищете вашей исходной строкой кода ) и производить необходимые над ним действия.

Так же такое решение будет более правильным, потому что в вашем коде вы жестко полагаетесь на иерархию объектов на сцене (или в префабе) и если вы что-то поменяете в иерархии, то вам придется вносить изменения в коде, тогда как создав сериализуемое поле, в случае изменения объекта вы сможете просто перетащить другой объект в редакторе unity без изменения и перекомпиляции скриптов.

Код будет намного компактней и оптимальнее, так как методы GetComponent и GetChild далеко не самые оптимальные.

Пример кода:

public class MyClass : MonoBehaviour
{
    // создаст в инспекторе поле типа Image с названием MyImage
    [SerializeField] private Image _myImage;
    // и далее в нужном вам методе 
    _myImage.sprite = L_Pan;
}
READ ALSO
HTML 5 Плеер не работает

HTML 5 Плеер не работает

ПриветствуюОтправляю куски от видео, массивы байт плееру, но он стакается и не проигрывает хотя и определяет длину видео

219
Вставить Автотекст в закладку word

Вставить Автотекст в закладку word

Подскажите пожалуйста, как (c# winforms vs2010) выполнить вставку автотекста с именем "tbl" в место расположения закладки с именем "new"Автотекст присутствует...

160
Как пользоватся файлами txt в Unity?

Как пользоватся файлами txt в Unity?

Вот моя ситуация: у меня есть игра, игровое поле которой представляет прямоугольник n*m, и мне очень удобно информацию о каждой клетке поля...

407