Instantiate vs. new GameObject

Раздел, посвящённый самому важному - скорости.

Instantiate vs. new GameObject

Сообщение WhiteDevil 30 июн 2011, 18:55

Сейчас работаем с созданием огромного числа объектов, и вобщем обнаружил такую штуку.
Циклом for создаю 10 тысяч объектов - квадрат из двух трианглов, к нему прикреплены меш, материал и колайдер.

Создавая через функцию Instantiate я получил зависание системы примерно на 10 секунд.
Используя конструктор пустого GameObject, а затем последовательное добавление (AddComponent) и инициализация компонентов - 12 секунд
Тоже конструктор, но с параметрами, после чего только инициализация - 7 секунд.

Синтаксис:
Используется csharp
                for (int i = 0; i < 10000; i++)
                {
                        GameObject newGo = new GameObject("Test", typeof(MeshFilter), typeof(MeshRenderer), typeof(BoxCollider));

                        (newGo.GetComponent<MeshFilter>() as MeshFilter).mesh = plane;
                        newGo.renderer.material = mat;
                }
 


Вот еще задался вопросом, а нельзя ли прямо в конструкторе ГО сразу инициализировать компоненты?

Ps: и почему нет какогото классного оптимизированного группового Instantiate... :(
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Instantiate vs. new GameObject

Сообщение Neodrop 30 июн 2011, 19:13

Тормозит не создание объектов, а регистрация коллайдеров. Не забывайте про существование профайлера.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт


Вернуться в Оптимизация

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

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