Помощь с написанием кода

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

Помощь с написанием кода

Сообщение Hisot 09 июл 2020, 21:36

Всем привет! Есть код написанный от руки, нужна помощь в оптимизации его с выполнением в циклах.
Код без оптимизации:
Синтаксис:
Используется csharp
massRend[0] = GameObject.Find("vertical/vert1/vert1.5").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[0], 1, vertColor)); //выждать и вкл

            massRend[1] = GameObject.Find("vertical/vert1/vert1.6").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[1], 1, vertColor)); //выждать и вкл

            massRend[2] = GameObject.Find("vertical/vert1/vert1.7").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[2], 1, vertColor)); //выждать и вкл


            massRend[3] = GameObject.Find("vertical/vert2/vert2.4").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[3], 2, vertColor)); //выждать и вкл
           
            massRend[4] = GameObject.Find("vertical/vert2/vert2.5").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[4], 2, vertColor)); //выждать и вкл

            massRend[5] = GameObject.Find("vertical/vert2/vert2.6").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[5], 2, vertColor)); //выждать и вкл

            massRend[6] = GameObject.Find("vertical/vert2/vert2.7").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[6], 2, vertColor)); //выждать и вкл

            massRend[7] = GameObject.Find("vertical/vert2/vert2.8").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[7], 2, vertColor)); //выждать и вкл


            massRend[8] = GameObject.Find("vertical/vert3/vert3.3").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[8], 3, vertColor)); //выждать и вкл

            massRend[9] = GameObject.Find("vertical/vert3/vert3.4").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[9], 3, vertColor)); //выждать и вкл

            massRend[10] = GameObject.Find("vertical/vert3/vert3.5").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[10], 3, vertColor)); //выждать и вкл

            massRend[11] = GameObject.Find("vertical/vert3/vert3.6").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[11], 3, vertColor)); //выждать и вкл

            massRend[12] = GameObject.Find("vertical/vert3/vert3.7").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[12], 3, vertColor)); //выждать и вкл

            massRend[13] = GameObject.Find("vertical/vert3/vert3.8").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[13], 3, vertColor)); //выждать и вкл

            massRend[14] = GameObject.Find("vertical/vert3/vert3.9").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[14], 3, vertColor)); //выждать и вкл


            massRend[15] = GameObject.Find("vertical/vert4/vert4.2").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[15], 4, vertColor)); //выждать и вкл

            massRend[16] = GameObject.Find("vertical/vert4/vert4.3").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[16], 4, vertColor)); //выждать и вкл

            massRend[17] = GameObject.Find("vertical/vert4/vert4.4").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[17], 4, vertColor)); //выждать и вкл

            massRend[18] = GameObject.Find("vertical/vert4/vert4.5").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[18], 4, vertColor)); //выждать и вкл

            massRend[19] = GameObject.Find("vertical/vert4/vert4.6").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[19], 4, vertColor)); //выждать и вкл

            massRend[20] = GameObject.Find("vertical/vert4/vert4.7").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[20], 4, vertColor)); //выждать и вкл

            massRend[21] = GameObject.Find("vertical/vert4/vert4.8").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[21], 4, vertColor)); //выждать и вкл

            massRend[22] = GameObject.Find("vertical/vert4/vert4.9").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[22], 4, vertColor)); //выждать и вкл

            massRend[23] = GameObject.Find("vertical/vert4/vert4.10").GetComponent<Renderer>();
            StartCoroutine(SvetVKL(massRend[23], 4, vertColor)); //выждать и вкл

Код с началом оптимизации:
Синтаксис:
Используется csharp
for (int i = 1; i <= 10; i++)
            {
                if (k ??????????????????)
                {
                    massRender[i] = GameObject.Find("vertical/vert" + i + "/vert" + i + "." + k).GetComponent<Renderer>();
                    StartCoroutine(SvetVKL(massRend[i], i, vertColor)); //выждать и вкл
                    k++;
                }
            }

Что надо написать в нем чтоб оно работало как надо.
Под спойлером показано, как работает код без оптимизации.
Скрытый текст:
Изображение
Последний раз редактировалось Hisot 10 июл 2020, 02:29, всего редактировалось 2 раз(а).
Hisot
UNец
 
Сообщения: 3
Зарегистрирован: 08 июл 2020, 20:38

Re: Помощь с написанием кода

Сообщение Tolking 09 июл 2020, 22:04

[сериализибле]
public class foo{
public Renderer render;
public k;
public color col;
}

public foo[] massRend - ручками заполняешь массив нужными параметрами;

for (int i = 1; i <= massRend; i++){

StartCoroutine(SvetVKL(massRend[i].render,massRend[i].k, massRend[i].col));

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

Re: Помощь с написанием кода

Сообщение Hisot 09 июл 2020, 22:09

ручками заполнять массив это в инспекторе тягать ? так там цилиндров под 2к
Hisot
UNец
 
Сообщения: 3
Зарегистрирован: 08 июл 2020, 20:38

Re: Помощь с написанием кода

Сообщение Woland 10 июл 2020, 00:04

Напиши код, который заполняет массив в инспекторе (во время редактирования сцены).
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Помощь с написанием кода

Сообщение Hisot 10 июл 2020, 00:08

Woland писал(а):Напиши код, который заполняет массив в инспекторе (во время редактирования сцены).

вот что-то вообще не понял про, что сейчас сказано. Можно пример или видео на Youtube?
Hisot
UNец
 
Сообщения: 3
Зарегистрирован: 08 июл 2020, 20:38

Re: Помощь с написанием кода

Сообщение Woland 10 июл 2020, 10:18

Unity позволяет писать кастомные расширения для редактора. Напиши скрипт, который при нажатии на кнопку в редакторе ищет нужные объекты и заполняет массив.
https://learn.unity.com/tutorial/editor-scripting#
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9