Помогите оптимизировать скрипт

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Помогите оптимизировать скрипт

Сообщение e-x 05 апр 2023, 14:49

Есть массив, мои кнопки

public GameObject[] buttons

на кнопках висит скрипт Button, мне нужна обращаться к элементу Image скрипту Button далее у меня везде так

Синтаксис:
Используется csharp
public void ButtonClickDown()
        {
            for (int i = 0; i < buttons.Length; i++)
            {
                if (buttons[i].GetComponent<Button>().id == currentId)
                {
                    buttons[i].GetComponent<Image>().color = buttons[i].GetComponent<Button>().selectedColor;
                    switch (currentId)
                    {
                        case 1:
                            SlotCraftEnable();
                            break;
                    }
                    switch (currentId)
                    {
                        case 2:
                            SlotHandsEnable();
                            break;
                    }
                    foreach (GameObject item in slotItem)
                    {
                        item.GetComponent<Image>().color = buttons[i].GetComponent<Button>().selectedColor;
                    }
                }
                if (buttons[i].GetComponent<Button>().id != currentId)
                {
                    buttons[i].GetComponent<Image>().color = disableColor;
                    buttons[i].GetComponent<Button>().enabled = false;
                }
            }
        }

 


везде вообщем GetComponent мне кажется как то это неправильно, может можно как-то указать в функции Старт GetComponent ?
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Помогите оптимизировать скрипт

Сообщение jr900 05 апр 2023, 15:20

Все GetComponent по возможности нужно кэшировать в отдельные переменные в Start:

Button _button = GetComponent<Button>();
Image _image = GetComponent<Image>();

А в Update уже юзать полученные переменные.
Скачать бесплатно ассеты для Unity
Скачать ассеты для Unreal Engine 4 / 5
Скачать 3d-модели для игр и дизайна
Персонажи DAZ-Poser для игр
jr900
UNIт
 
Сообщения: 83
Зарегистрирован: 16 апр 2016, 10:13

Re: Помогите оптимизировать скрипт

Сообщение e-x 05 апр 2023, 15:32

Я чет не совсем понял, в моем случае у меня массив

public GameObject[] buttons

я работаю с buttons[i].....как в моем случае должно быть?

Спасибо!
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Помогите оптимизировать скрипт

Сообщение Tolking 05 апр 2023, 16:09

не public GameObject[] buttons, а public Button[] buttons
А у Button есть image, color или spriteState на конец...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Помогите оптимизировать скрипт

Сообщение e-x 05 апр 2023, 16:22

Ну ОК одну проблему так решим, но к имеджу если надо то все равно будет потом так

buttons[i].GetComponent<Image>().color = highliterColor;
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Помогите оптимизировать скрипт

Сообщение Tolking 05 апр 2023, 16:40

buttons[i].color
buttons[i].image.color
buttons[i].spriteState.highlightedSprite.color
buttons[i].spriteState.pressedSprite.color
buttons[i].spriteState.disabledSprite.color
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Помогите оптимизировать скрипт

Сообщение e-x 05 апр 2023, 16:48

Так в том то и дело что не находит у меня то что Вы пишите, я не использую Button из UI...у меня Button это image
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Помогите оптимизировать скрипт

Сообщение Tolking 05 апр 2023, 17:09

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

В своем бутоне сделай поле image, как в Button из UI... Только если тебе нужна кнопка, то точно нужно велик изобретать?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Помогите оптимизировать скрипт

Сообщение e-x 05 апр 2023, 17:20

Кнопка из UI не интересно, хочу сам все с нуля.
А GetComponent кешировать в Старте..это как вообще правильно?Или все же строить так чтоб не прибегать к этому?
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Помогите оптимизировать скрипт

Сообщение Tolking 06 апр 2023, 11:27

Ну можно вообще не прибегать к GetComponent и руками установить нужный объект в поле до рантайма...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Помогите оптимизировать скрипт

Сообщение Alkos26Rus 06 апр 2023, 11:59

e-x писал(а):Кнопка из UI не интересно, хочу сам все с нуля.
А GetComponent кешировать в Старте..это как вообще правильно?Или все же строить так чтоб не прибегать к этому?


Это твой собственный класс Button? Во-первых так не называй никогда, у юнити уже есть такой. Если это твой, то ты туда можешь любые поля прописать. А массив уже делай не из GameObject а из твоего класса Button и обращайся напрямую buttons[i].id и т.д
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Помогите оптимизировать скрипт

Сообщение e-x 07 апр 2023, 10:07

Так и сделал, налепил в Button имеджов, руками вставил, гет компонент не нужно.

А как понять что в Unity уже есть какойто клас, название? Где это написано?

Да Button это мой клас, Юнити не ругался, может то что пространство имен у меня другое.
e-x
UNIт
 
Сообщения: 141
Зарегистрирован: 20 июн 2022, 16:47

Re: Помогите оптимизировать скрипт

Сообщение 1max1 07 апр 2023, 11:45

Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

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

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