Моей ошибкой при создании 2D объектов на Unity было представление, что ничего плохого не происходит если в коде поменять текстуру материала или поменять смещение и другие её параметры. Как оказалось при осуществлении этих действий Unity создает отдельный материал, что конечно же добавляет Draw Call.
Почитав немного о материалах я сначала хотел использовать sharedMaterial, но поняв, что изменив смещение текстуры на нем поменяются текстуры на всех объектах с таким же материалом я отказался от этой идеи.
Продолжив поиски я нашел прекрасный класс, который был написан пользователями Unity сообщества - Sprite Manager. Он очень удобен для создания большого количества объектов. И количество Draw Calls при его применении равно количеству разных материалов. Поэтому, с его помощью, мне удалось значительно ускорить игру.
Использовать его довольно просто:
1. Создаем пустой объект и назначаем ему скрипт SpriteManager или LinkedSpriteManager (если объекты постоянно движутся). Заполняем параметр AllockBlockSize - примерное количество объектов данного вида (т.е. создается статический массив заданной длины) и задаем материал.
2. Затем создаем объект (например, Plane), отключаем Renderer. Навешиваем на него скрипт, который содержит ссылку на объект со SpriteManager из пункта 1.
3. Вызываем соответствующие процедуры инициализации. Я использовал функцию AddSprite.
Всем кто занимается 2D анимацией очень рекомендую использовать данный класс. Экономит много времени и ускоряет вашу игру.
Почитав немного о материалах я сначала хотел использовать sharedMaterial, но поняв, что изменив смещение текстуры на нем поменяются текстуры на всех объектах с таким же материалом я отказался от этой идеи.
Продолжив поиски я нашел прекрасный класс, который был написан пользователями Unity сообщества - Sprite Manager. Он очень удобен для создания большого количества объектов. И количество Draw Calls при его применении равно количеству разных материалов. Поэтому, с его помощью, мне удалось значительно ускорить игру.
Использовать его довольно просто:
1. Создаем пустой объект и назначаем ему скрипт SpriteManager или LinkedSpriteManager (если объекты постоянно движутся). Заполняем параметр AllockBlockSize - примерное количество объектов данного вида (т.е. создается статический массив заданной длины) и задаем материал.
2. Затем создаем объект (например, Plane), отключаем Renderer. Навешиваем на него скрипт, который содержит ссылку на объект со SpriteManager из пункта 1.
3. Вызываем соответствующие процедуры инициализации. Я использовал функцию AddSprite.
Всем кто занимается 2D анимацией очень рекомендую использовать данный класс. Экономит много времени и ускоряет вашу игру.
Комментариев нет:
Отправить комментарий