Страница 1 из 2

Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 00:38
NAGIBATOR228pacan
Решил сделать большой 2д мир из блоков, но возникла проблема, такой мир даже 1000 x 200 занимает больше одного гигабайта оперативной памяти, как это исправить? И как это сделано в terraria, нужно чтобы как в терарии мир был очень большим но оперативку не загружало.

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 01:15
Tolking
1000 x 200 блоков, при условии что количество типов блоков будет 255 займет 0.2 мегабайта... (1000 * 200 = 200 000 блоков если типов 255 то для хранения блока достаточно байта, а 200 000 байт = 195.3 Кб )

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 10:16
NAGIBATOR228pacan
Ну это я знаю, но почему в юнити все занимает так много? Блоки из префабов .

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 12:31
Tolking
Ну, например, префабы - кубики с текстурой 2024х2024 и создаешь сразу все блоки...

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 13:52
NAGIBATOR228pacan
Есть разница между текстурой и спрайтом? Я создаю через for сразу все Кубы и это занимает 1гб оперативки.

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 14:22
Tolking
Текстура - картинка, спрайт - объект... Если создаешь все сразу, то все правильно, так и должно быть...

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 14:40
NAGIBATOR228pacan
А как заполнять не спрайтом? Через ongui рисовать? Или image создавать?

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 15:29
Tolking
Через онгуи не будет память забирать, но будет тормозить, имидж памяти займет аналогично...

Я не считаю что занятые 1Гб памяти проблема. Но если это проблема, то нужно реализовывать чтобы строился тот кусок, который видно в текущий момент...

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 16:26
NAGIBATOR228pacan
Но вроде бы в терарии все происходит одновременно, это на 2000000 блоков это 1 гб, мне побольше надо бы.

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 16:28
Tolking
Если в терарии все происходит одновременно, то занимает соответствующее количество памяти... В программировании чудес нет...

Re: Большой мир из блоков 2D

СообщениеДобавлено: 23 май 2017, 16:48
DbIMok
нужно использовать атлас. вообще, посмотрите в профайлере что у вас столько памяти занимает

Re: Большой мир из блоков 2D

СообщениеДобавлено: 26 май 2017, 19:57
NAGIBATOR228pacan
Нашел решение, нужно было запомнить id и координаты блока с помощью двухмерного массива, и ставить блоки только, когда они в зоне камеры, и удалять когда они за ней, но вот только возникла еще одна проблема, не получается нормально удалить, точнее получается, но с микро лагом.
Синтаксис:
Используется csharp
void Clear(){
  GameObject[] blocks = GameObject.FindGameObjectsWithTag("Block");
        foreach (GameObject Object in blocks)
        {
            if (Object.transform.position.x < transform.position.x - 25) { Destroy(Object); }
            if (Object.transform.position.x > transform.position.x + 25) { Destroy(Object); }
        }
        cleartimer = 2f;
}
 

из-за этого каждые 2 секунды, случается микро лаг.
Можете предложить более эффективный метод удаления?

Re: Большой мир из блоков 2D

СообщениеДобавлено: 26 май 2017, 20:09
Valentinus
судя по cleartimer = 2f; вы каждые две секунды вызываете эту функцию? можете показать как вы это делаете?

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

тут либо сделайте этот период короче, чтобы не успевало накопиться много блоков, т.е. удаляйте чаще, но понемногу.
либо сделайте эту функцию корутиной, в ней можно удалять ненужные блоки небольшими порциями, после чего возвращать управление в основной поток.

Re: Большой мир из блоков 2D

СообщениеДобавлено: 26 май 2017, 20:10
NAGIBATOR228pacan
Ну если задержку меньше делать, 30 fps будет.

Re: Большой мир из блоков 2D

СообщениеДобавлено: 26 май 2017, 20:28
NAGIBATOR228pacan
Только что сбилдил игру на телефон, и с этим удалением там еще хуже. Почему установка блоков не лагает, а удаление да?