Карты из объектов

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

Карты из объектов

Сообщение Груберк 25 июл 2011, 10:09

Добрый день. Имею скрипт на заселение карты 512*512 объектами-префабами (клетками, как в Героях 3). Когда запускаю игру, то она задыхается от генерации 262144 экземпляров префабов.
(Скрипт рабочий, т.к. опускаем планку до 10*10, 50*50 и карта безболезненно генерируется)
Подскажите, как в Unity организуется жизненный цикл объекта? Есть ли механизм загрузки объекта в память и автоматического его отображения при попадании в камеру или все нужно организовывать самому? Карта создается в runtime, т.к. есть опорные точки указанные дизайнером, а промежутки между ними заполняются по алгоритму (что бы каждый раз была разная карта). Просветите, короче, о тонкостях...
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Карты из объектов

Сообщение gnoblin 25 июл 2011, 12:32

что значит задыхается - вылетает, виснет или просто долго думает?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Карты из объектов

Сообщение raul82 25 июл 2011, 12:42

gnoblin писал(а):что значит задыхается - вылетает, виснет или просто долго думает?

ежу же понятно, задыхается значит дышать не чем :-B
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Карты из объектов

Сообщение Груберк 25 июл 2011, 13:18

Долго думает, возможно даже зависает.
При 50*50 грузится в течении десятка секунд.
При 100*100 уже не дожидаюсь.
При 512*512 и подавно.

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System;

public class NewBehaviourScript : MonoBehaviour {
        public int Ax = 0;
        public int Ay = 0;
        public int Bx = 512;
        public int By = 512;
        public GameObject CubeLow;
        public GameObject CubeHigh;

        // Use this for initialization
        void Start () {
                double VecA;
        double VecB;
        for (int i = 0; i < 512; i++)
        {
            for (int j = 0; j < 512; j++)
            {
                VecA = Math.Sqrt((i - Ax) * (i - Ax) + (j - Ay) * (j - Ay));
                VecB = Math.Sqrt((i - Bx) * (i - Bx) + (j - By) * (j - By));
                int a = UnityEngine.Random.Range(0,100);
                if (a < VecA * 100 / (VecA + VecB))
                {
                    Instantiate(CubeLow, new Vector3 (i, 0, j), Quaternion.identity);
                                }
                else
                {
                    Instantiate(CubeHigh, new Vector3 (i, 0, j), Quaternion.identity);
                }
            }
                }
        }
       
        // Update is called once per frame
        void Update () {
       
        }
}


Вроде бы ничего сложного, но похоже, что где-то забиваю гвозди микроскопом...
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Карты из объектов

Сообщение raul82 25 июл 2011, 13:29

без профайлера не обойтись, с включенным deep profile
но помоему основные тормоза на вычислении корней
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Карты из объектов

Сообщение raul82 25 июл 2011, 13:41

вот так вроде прокатит
VecA = ((i - Ax) * (i - Ax) + (j - Ay) * (j - Ay));
VecB = ((i - Bx) * (i - Bx) + (j - By) * (j - By));
int a = UnityEngine.Random.Range(0,100);

if (a < VecA*VecA * 100 / (VecA*VecA + VecB*VecB))
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Карты из объектов

Сообщение Груберк 25 июл 2011, 13:46

этот же код сначала тестировался на генерации картинки в Visual C#, там заполнение аналогичного поля пикселями происходит в течении 3х секунд

покатит-то покатит, но ведь это уже не та формула будет...

p.s. не покатило и это, значит что-то с менеджментом такого количества объектов наверное...

p.p.s. вообще убрал расчеты, предложил заспамить поле одним типом кубиков - все-равно висит...
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Карты из объектов

Сообщение raul82 25 июл 2011, 14:00

тогда предлогаю замерить сколько идет 1 инстантиэйт

print("Start " + Time.time);
Instantiate(CubeLow, new Vector3 (i, 0, j), Quaternion.identity);
print("Done " + Time.time);
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Карты из объектов

Сообщение gnoblin 25 июл 2011, 14:05

складывайте объекты секторами в думики, юнити плющит если на одном уровне иерархии много объектов (вроде что-то около 16к).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Карты из объектов

Сообщение Zaicheg 25 июл 2011, 14:05

Была мысль, что дело в коллайдерах (Нео, кажется, писал, что инстансирование коллайдеров ест много времени), но особого профита не получил. Вернее, само инстансирование занимает теперь в два раза меньше времени, но время инстансирования (общее) для 96х96 — это всего 0.45 секунды с коллайдерами. То есть, тормоза не на самом инстансировании, а где-то после, в управлении Unity объектами. Я так думаю.

gnoblin писал(а):складывайте объекты секторами в думики, юнити плющит если на одном уровне иерархии много объектов (вроде что-то около 16к, не уверен)

А вот работу иерархии я как раз хотел проверить, Гноб быстрый сцуко )
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Карты из объектов

Сообщение Груберк 25 июл 2011, 14:12

gnoblin писал(а):складывайте объекты секторами в думики, юнити плющит если на одном уровне иерархии много объектов (вроде что-то около 16к).

это где-то 126*126 объектов, а у меня уже 100*100 умирает.
Вот замер времени выдал почему-то ноль, как я не старался...
Кстати при 50*50 одинаковых префабов происходит 190 Draw Call, тоже странно, разве они не инстанируются картой?
Попробую отключить коллайдеры
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Карты из объектов

Сообщение Zaicheg 25 июл 2011, 14:13

Груберк писал(а):
gnoblin писал(а):складывайте объекты секторами в думики, юнити плющит если на одном уровне иерархии много объектов (вроде что-то около 16к).

это где-то 126*126 объектов, а у меня уже 100*100 умирает.

Просто попробуйте думики, как говорит Гноблин. Только не в один, а в разные. Сделайте не 16к в одном, сделайте, скажем, 1к в одном, чтобы с запасом.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Карты из объектов

Сообщение raul82 25 июл 2011, 14:15

и еще возможно на префабах висят скрипты...
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Карты из объектов

Сообщение Груберк 25 июл 2011, 14:36

Синтаксис:
Используется csharp
       
void Start () {
        double VecA;
        double VecB;
        for (int i = 0; i < 120; i++)
        {
            var go = new GameObject();
            for (int j = 0; j < 120; j++)
            {
                var o = (GameObject)Instantiate(CubeHigh, new Vector3 (i, 0, j), Quaternion.identity);
                o.transform.parent = go.transform;
            }
        }
        }


вот таким кодом я перешел психологический барьер в 100*100. Дравколлов уже почти 2000, больше 200*200 прорваться не выходит.
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Карты из объектов

Сообщение gnoblin 25 июл 2011, 14:56

это сколько клеток на одном экране?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

След.

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

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

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