← Назад к вопросам

Какие знаешь данные в атласе?

1.0 Junior🔥 141 комментариев
#Оптимизация#Рендеринг и графика#Ресурсы и ассеты

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Типы данных в атласе Unity (Sprite Atlas)

Атлас спрайтов (Sprite Atlas) в Unity — это мощный инструмент оптимизации 2D графики, который объединяет множество отдельных спрайтов в один крупный текстуральный ресурс. Работа с атласами является ключевой для оптимизации рендеринга, так как уменьшает количество вызовов отрисовки (draw calls) и улучшает управление памятью. Основные типы данных и структуры, которые разработчик должен знать при работе с атласами, можно разделить на несколько категорий.

1. Основные параметры атласа (Inspector данные)

При создании атласа через систему Unity UGUI или 2D Sprite Packer, в инспекторе задаются следующие важные данные:

  • Тип атласа: Master Atlas или Variant Atlas. Master — основной, Variant — его производные (например, для разных разрешений или цветовых схем).
  • Метод включения (Pack Mode):
    *   `Tight` — для спрайтов с альфа-каналом, обрезает пустые области, может создавать не прямоугольные формы.
    *   `Rectangular` — для спрайтов без сложной формы или требующих жестких прямоугольных границ (например, для UI).
  • Параметры текстуры:
    *   **Max Size** — максимальный размер итоговой текстуры (например, 2048x2048).
    *   **Padding** — количество пикселей между спрайтами в атласе для предотвращения bleeding (просачивания цвета соседних спрайтов).
    *   **Compression** — метод компрессии (None, Low, Medium, High, ETC2, ASTC). Выбор зависит от платформы.

2. Данные внутри атласа (Спрайты и их мета-информация)

После упаковки (Pack) атлас содержит набор спрайтов, каждый из которых описывается следующими данными:

  • Sprite Name — исходное имя спрайта или имя его текстуры.
  • UV Coordinates (Texture Rect) — координаты и размеры спрайта внутри большой текстуры атласа. Это ключевые данные для отрисовки.
  • Pivot Point — точка привязки спрайта (Center, Custom, Bottom Left, etc.).
  • Border Data (для 9-slice UI) — значения SpriteBorder (left, bottom, right, top) для спрайтов, используемых в масштабируемых UI элементах типа Image.

3. Данные в скриптах (API SpriteAtlas)

Для работы с атласами из кода используется класс UnityEngine.U2D.SpriteAtlas. Основные данные и методы, доступные через API:

using UnityEngine.U2D;

// Получение атласа (например, через Resources или ссылку)
SpriteAtlas atlas = Resources.Load<SpriteAtlas>("MyAtlas");

// 1. Основные данные атласа доступны через свойства:
int spriteCount = atlas.spriteCount; // Количество спрайтов в атласе

// 2. Ключевой метод для получения конкретного спрайта по его имени
Sprite targetSprite = atlas.GetSprite("sprite_name");

// 3. Получение всех спрайтов в атласе (например, для динамической загрузки)
Sprite[] allSprites = new Sprite[atlas.spriteCount];
atlas.GetSprites(allSprites);
// Важно: GetSprites() возвращает Sprite[], но имя каждого sprite будет иметь постфикс "(Clone)". 
// Для получения оригинального имени нужно использовать оригинальный метод GetSprite().

4. Данные для адресной (адресабельной) загрузки

При использовании Addressable Assets System или Asset Bundles, атлас становится адресабельным ресурсом. В этом случае ключевыми данными являются:

  • Addressable Key — адрес (например, "MyAtlas" или "UI/Atlases/MainUI"), по которому система загружает атлас.
  • Зависимости (Dependencies) — атлас может быть зависимостью для других адресабельных объектов (например, префабов UI).

5. Runtime данные и производительность

На этапе выполнения игры важны следующие производные данные:

  • Текстура атласа — итоговый Texture2D объект, который загружается в память и передается на GPU. Его размер в памяти напрямую зависит от выбранной компрессии и Max Size.
  • Draw Call Reduction — косвенная, но критически важная "данная". Использование одного атласа для группы спрайтов позволяет рендерить их одним или минимальным количеством материалов и шейдерных проходов, что значительно повышает FPS, особенно на мобильных устройствах.
  • Cache Data — при использовании системы Sprite Atlas Cache (например, для Variant Atlas под разные разрешения) данные об уже загруженных атласах хранятся в кеше для быстрого переключения.

Практический пример использования данных в коде

Предположим, мы хотим динамически создать UI Image из спрайта в атласе:

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.U2D;

public class UIDynamicLoader : MonoBehaviour
{
    public SpriteAtlas uiAtlas;
    public string spriteName = "button_icon";

    void Start()
    {
        // 1. Получаем данные спрайта (Sprite) из атласа по имени
        Sprite spriteData = uiAtlas.GetSprite(spriteName);
        
        if(spriteData != null)
        {
            // 2. Создаем новый GameObject с компонентом Image
            GameObject newUIElement = new GameObject("DynamicIcon");
            Image img = newUIElement.AddComponent<Image>();
            
            // 3. Присваиваем полученный спрайт. Unity автоматически будет использовать 
            //    UV координаты и текстуру атласа для его отрисовки.
            img.sprite = spriteData;
            
            // 4. Устанавливаем RectTransform данные (например, pivot из спрайта)
            RectTransform rt = newUIElement.GetComponent<RectTransform>();
            rt.pivot = spriteData.pivot;
            
            newUIElement.transform.SetParent(this.transform, false);
        }
    }
}

Заключение: Знание типов данных в атласе — от базовых параметров упаковки до API SpriteAtlas и данных для адресной загрузки — позволяет разработчику не только эффективно организовывать 2D ресурсы, но и реализовывать сложные динамические системы, оптимизировать производительность и управлять памятью на всех этапах разработки проекта Unity.

Какие знаешь данные в атласе? | PrepBro