Упаковщик спрайтов (Sprite Packer)
При работе со спрайтовой графикой, очень важно при работе с разными персонажами, работать с разными файлами текстур. Однако, значительное пространство спрайтовой текстуры будет уходить на пустые участки между графическими элементами, результатом чего станет бесполезный расход памяти при работе игры или приложения. Для достижения оптимальной производительности лучше всего будет упаковывать графические элементы из нескольких спрайтовых текстур как можно плотнее в одну текстуру, именуемую атласом. В Unity есть утилита Sprite Packer , предназначенная как раз для создания таких атласов из набора отдельных текстур.
В Unity процесс создания и назначения атласных текстур остаётся за кадром, позволяя пользователю сосредоточиться на более важных вещах. При желании атлас можно упаковать при входе в режим Play или во время сборки, в результате чего графическая составляющая этого спрайтового объекта отобразится сразу же, как только она будет подгружена из необходимого атласа.
Пользователям необходимо указывать “тег упаковки” (Packing Tag) в импортере текстур (Texture Importer), чтобы включить упаковку спрайтов для данной текстуры.
Использование упаковщика спрайтов
По-умолчанию упаковщик спрайтов отключён, но его работу можно настроить через настройки редактора (меню: Edit -> Project Settings -> Editor ). Метод упаковывания спрайтов можно установить из состояния Disabled в состояние Enabled for Builds (где упаковывание будет работать для сборок, но не в режиме Play) или в состояние Always Enabled (где упаковывание будет работать и во время сборки и в режиме Play).
Если вы откроете окно Sprite Packer (menu: Window -> Sprite Packer ) и нажмёте в левом верхнем углу на кнопку Pack , вы увидите расположение текстур упакованных на этом атласе.
![]()
Если вы выберете спрайт в панели Project, он подсветится, чтобы показать своё местоположение на атласе. Видимый контур представляет из себя контур самого меша, а также показывает область, которая будет использована для плотной упаковки.
Панель инструментов, расположенная в верхней части окна упаковщика спрайтов имеет ряд элементов управления, которые влияют на упаковывание и просмотр. Pack кнопки инициализируют операцию упаковывания, но никаких обновлений не последует до тех пор, пока не будут зарегистрированы изменения в самом атласе с момента его последней упаковки. (Если вы решите реализовать свои (пользовательские) правила упаковки, то появится соответствующая кнопка Repack , как это будет описано ниже в Customizing the Sprite Packer below). Меню View Atlas и Page # позволят вам выбрать какую страницу из какого атласа нужно отобразить в окне (если при максимальном размере текстуры в неё не помещаются все спрайты, атлас может быть разбит на множество страниц). Меню, следующее за номером страницы позволяет выбрать какие правила упаковывания используются для текущего атласа (см. ниже). Справа от панели инструментов имеются два элемента управления для зуммирования содержимого окна просмотра и переключения между цветным и альфа отображением самого атласа.
Политика упаковки
Упаковщик спрайтов использует packing policy , чтобы определять, как применять спрайты к атласам. Можно создавать и свои собственные правила упаковки (см. ниже), но опции Default Packer Policy и Tight Packer Policy будут всегда доступны. С этими правилами свойство Packing Tag в Texture Importer позволяет напрямую выделять атлас, для которого будет произведено упаковывание спрайтов по тегу. Т.е. все спрайты с таким же тегом упаковки будут упакованы в один и тот же атлас. Затем атласы дополнительно сортируются по признаку настройки импортирования текстур, чтобы даже в этом случае они совпадали несмотря на то, как прежде определил пользователь исходные текстуры. Если возможно, спрайты со схожей степенью сжатия текстур могут будут сгруппированы в одном и том же атласе.
- DefaultPackerPolicy по-умолчанию будет использовать прямоугольный метод упаковывания до тех пор, пока не будет назначен “[TIGHT]” метод в Packing Tag (т.е. назначение методу упаковывания тега [TIGHT] приведёт к использованию плотного метода упаковывания).
- TightPackerPolicy по-умолчанию будет использовать плотное упаковывание, если спрайт имеет плотную сетку. Если в Packing Tag будет назначен тег “[RECT]”, то будет выполнен прямоугольный метод упаковки (т.е. присвоение вашему упаковыванию тега “[RECT]UI_Elements” приведёт к прямоугольному методу упаковывания).
- TightPackerPolicy по-умолчанию будет использовать плотное упаковывание, если спрайт имеет плотную сетку. Если в Packing Tag будет назначен тег “[RECT]”, то будет выполнен прямоугольный метод упаковки (т.е. присвоение вашему упаковыванию тега “[RECT]UI_Elements” приведёт к прямоугольному методу упаковывания).
Настройка упаковщика спрайтов
Для большинства целей опции DefaultPackerPolicy будет достаточно, однако при необходимости вы сможете реализовать и свою собственную политику упаковки. Чтобы сделать это, вам необходимо реализовать интерфейс UnityEditor.Sprites.IPackerPolicy для класса в скрипте редактора. Данный интерфейс нуждается в следующих методах:
- GetVersion — возвращает в виде значения версию политики вашего упаковщика. Версию политики необходимо обновить в случае, если в скрипт был изменён и эти изменения были сохранены через контроль версий.
- OnGroupAtlases — отвечает за реализацию алгоритма упаковки. Укажите атласы в PackerJob и примените спрайты из данных TextureImporters.
DefaultPackerPolicy по-умолчанию использует прямоугольное упаковывание (см. SpritePackingMode). Это может быть полезно, если необходимо использовать текстурно-пространственные эффекты или другой меш для отображения текущего спрайта. С помощью пользовательских прав можно перезаписать эти значения и использовать вместо прямоугольного метода, плотный метод упаковывания.
- Кнопка Repack становится доступной только тогда, когда выбрана своя политика (custom policy). \t* Свойство OnGroupAtlases не будет вызвано до тех пор, пока не будут изменены значения метаданных TextureImporter-а или выбранной версии PackerPolicy. \t* Работая над своей собственной политикой, используйте кнопку Repack.
- Sprites can be packed rotated with TightRotateEnabledSpritePackerPolicy automatically. \t* SpritePackingRotation является зарезервированным типом для будущих версий Unity.
Другое
- Атласы кешируются в Project\Library\AtlasCache. \t* Удаление этой папки и последующий запуск Unity приведёт к принудительной перепаковке всех атласов. Во время удаления Unity должен был закрыт.
- Кэш атласа не подгружается при запуске. \t* Все текстуры должны проверяться при первой упаковке после перезапуска Unity. Сама операция может занять какое-то время, которое зависит от общего количества текстур, имеющихся в проекте. \t* Подгружаются только необходимые атласы.
- Максимальный размер атласа по умолчанию равен 2048х2048.
- При назначенном свойстве PackingTag текстуры не будут сжиматься, чтобы упаковщик спрайтов мог использовать оригинальные значения пикселей при сжатии атласов.
Политика стандартного упаковщика
using System; using System.Linq; using UnityEngine; using UnityEditor; using System.Collections.Generic; public class DefaultPackerPolicySample : UnityEditor.Sprites.IPackerPolicy < protected class Entry < public Sprite sprite; public UnityEditor.Sprites.AtlasSettings settings; public string atlasName; public SpritePackingMode packingMode; public int anisoLevel; >private const uint kDefaultPaddingPower = 3; // Good for base and two mip levels. public virtual int GetVersion() < return 1; >protected virtual string TagPrefix < get < return "[TIGHT]"; >> protected virtual bool AllowTightWhenTagged < get < return true; >> protected virtual bool AllowRotationFlipping < get < return false; >> public static bool IsCompressedFormat(TextureFormat fmt) < if (fmt >= TextureFormat.DXT1 && fmt = TextureFormat.DXT1Crunched && fmt = TextureFormat.PVRTC_RGB2 && fmt = TextureFormat.ATC_RGB4 && fmt = TextureFormat.EAC_R && fmt = TextureFormat.ETC2_RGB && fmt = TextureFormat.ASTC_RGB_4x4 && fmt = TextureFormat.DXT1Crunched && fmt public void OnGroupAtlases(BuildTarget target, UnityEditor.Sprites.PackerJob job, int[] textureImporterInstanceIDs) < Listentries = new List(); foreach (int instanceID in textureImporterInstanceIDs) < TextureImporter ti = EditorUtility.InstanceIDToObject(instanceID) as TextureImporter; TextureFormat desiredFormat; ColorSpace colorSpace; int compressionQuality; ti.ReadTextureImportInstructions(target, out desiredFormat, out colorSpace, out compressionQuality); TextureImporterSettings tis = new TextureImporterSettings(); ti.ReadTextureSettings(tis); Sprite[] sprites = AssetDatabase.LoadAllAssetRepresentationsAtPath(ti.assetPath) .Select(x =>x as Sprite) .Where(x => x != null) .ToArray(); foreach (Sprite sprite in sprites) < Entry entry = new Entry(); entry.sprite = sprite; entry.settings.format = desiredFormat; entry.settings.colorSpace = colorSpace; // Use Compression Quality for Grouping later only for Compressed Formats. Otherwise leave it Empty. entry.settings.compressionQuality = IsCompressedFormat(desiredFormat) ? compressionQuality : 0; entry.settings.filterMode = Enum.IsDefined(typeof(FilterMode), ti.filterMode) ? ti.filterMode : FilterMode.Bilinear; entry.settings.maxWidth = 2048; entry.settings.maxHeight = 2048; entry.settings.generateMipMaps = ti.mipmapEnabled; entry.settings.enableRotation = AllowRotationFlipping; if (ti.mipmapEnabled) entry.settings.paddingPower = kDefaultPaddingPower; else entry.settings.paddingPower = (uint)EditorSettings.spritePackerPaddingPower; #if ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION entry.settings.allowsAlphaSplitting = ti.GetAllowsAlphaSplitting (); #endif //ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION entry.atlasName = ParseAtlasName(ti.spritePackingTag); entry.packingMode = GetPackingMode(ti.spritePackingTag, tis.spriteMeshType); entry.anisoLevel = ti.anisoLevel; entries.Add(entry); >Resources.UnloadAsset(ti); > // First split sprites into groups based on atlas name var atlasGroups = from e in entries group e by e.atlasName; foreach (var atlasGroup in atlasGroups) < int page = 0; // Then split those groups into smaller groups based on texture settings var settingsGroups = from t in atlasGroup group t by t.settings; foreach (var settingsGroup in settingsGroups) < string atlasName = atlasGroup.Key; if (settingsGroups.Count() >1) atlasName += string.Format(" (Group )", page); UnityEditor.Sprites.AtlasSettings settings = settingsGroup.Key; settings.anisoLevel = 1; // Use the highest aniso level from all entries in this atlas if (settings.generateMipMaps) foreach (Entry entry in settingsGroup) if (entry.anisoLevel > settings.anisoLevel) settings.anisoLevel = entry.anisoLevel; job.AddAtlas(atlasName, settings); foreach (Entry entry in settingsGroup) < job.AssignToAtlas(atlasName, entry.sprite, entry.packingMode, SpritePackingRotation.None); >++page; > > > protected bool IsTagPrefixed(string packingTag) < packingTag = packingTag.Trim(); if (packingTag.Length < TagPrefix.Length) return false; return (packingTag.Substring(0, TagPrefix.Length) == TagPrefix); >private string ParseAtlasName(string packingTag) < string name = packingTag.Trim(); if (IsTagPrefixed(name)) name = name.Substring(TagPrefix.Length).Trim(); return (name.Length == 0) ? "(unnamed)" : name; >private SpritePackingMode GetPackingMode(string packingTag, SpriteMeshType meshType) < if (meshType == SpriteMeshType.Tight) if (IsTagPrefixed(packingTag) == AllowTightWhenTagged) return SpritePackingMode.Tight; return SpritePackingMode.Rectangle; >>
Политика плотного упаковщика
using System; using System.Linq; using UnityEngine; using UnityEditor; using UnityEditor.Sprites; using System.Collections.Generic; // TightPackerPolicy will tightly pack non-rectangle Sprites unless their packing tag contains "[RECT]". class TightPackerPolicySample : DefaultPackerPolicySample < protected override string TagPrefix < get < return "[RECT]"; >> protected override bool AllowTightWhenTagged < get < return false; >> protected override bool AllowRotationFlipping < get < return false; >> >
Политика плотного упаковщика
using System; using System.Linq; using UnityEngine; using UnityEditor; using UnityEditor.Sprites; using System.Collections.Generic; // TightPackerPolicy will tightly pack non-rectangle Sprites unless their packing tag contains "[RECT]". class TightRotateEnabledSpritePackerPolicySample : DefaultPackerPolicySample < protected override string TagPrefix < get < return "[RECT]"; >> protected override bool AllowTightWhenTagged < get < return false; >> protected override bool AllowRotationFlipping < get < return true; >> >
Работа со спрайтами (Unity3d). Часть II
В первой части статьи мы рассмотрели импорт спрайтов в Unity3d и некоторые особенности импорта.
В этой же статье я хочу поговорить о Листах Спрайтов (SpriteSheets).
SpriteSheets как они есть
SpriteSheets значительно облегчают работу со спрайтами и анимацией. Эта функция позволяет разбивать спрайты в одном файле на отдельные кадры анимации. Слишком заумно и много букв. Внизу иллюстрация.
В этом примере благодаря SpriteSheets в одном файле хранятся спрайты для анимации бега, полета, ожидания и т.д. Так что это действительно облегчает работу.
Давайте теперь перетащим такой спрайт на сцену и посмотрим, что произойдет.
После добавления его на сцену, он стал одним большим спрайтом, а это неправильно и это нам не подходит.
Для того чтобы сказать Unity, что в файле у нас не один файл, а несколько необходимо обратиться к полю Sprite Mode в Inspector’e, изменив там значение с Single на Multiple, тем самым сказав Unity, что это не один спрайт, а некоторое количество. Иллюстрация.
Сделав это, мы увидим, что появилась новая кнопка Sprite Editor, которой мы и воспользуемся. Нажав на неё перед вами откроется окно позволяющее «нарезать спрайты». Здесь необходимо открыть контекстное меню с помощью кнопки Slice, в котором вам будут доступны все настройки «нарезки спрайтов». Для облегчения мыслительного процесса иллюстрация.
Рассмотрим подробнее возможности этого меню.
Первое, что мы здесь видим, это тип «нарезки» спрайтов. Если мы так и оставим значение Automatic и нажмем Slice, то Unity обрежет все спрайты, просто взяв минимально возможное количество пикселей. Это нас не всегда устраивает, поскольку, если применить такой метод в нашем конкретном случае, то размеры всех спрайтов будут разными, а это приведет к неприемлемой «дерганой» анимации. Здесь пример неудачной автоматической «нарезки».
Хотя если спрайты одинаковы по размеру, что также бывает часто, то эта функция сэкономит время.
Теперь рассмотрим ручную «нарезку» спрайтов.
Во всё том же меню изменяем значение Automatic на Grid, после чего указываем высоту/ширину в пикселях и также нажимаем Slice.
Если при «нарезке» спрайтов вручную, у вас образуются пустые спрайты (они образуются!), не обращайте на них внимания. Они никоим образом не повлияют на ваш проект.
Повторюсь, что автоматическая нарезка спрайтов является полезной функцией, в действительности экономящей много времени и нервов. Поэтому, старайтесь по возможности использовать автоматическую «нарезку». Еще раз повторюсь как определить какой вид функции использовать. Если спрайты одинаковы или отличаются несущественно, то используйте функцию Automatic, иначе Grid.
Как выглядит та же анимация полета нарезанная вручную:
Работа со спрайтами в Unity Sprite Editor
![]()
Бывают такие ситуации когда текстура спрайта содержит не только один элемент, гораздо удобней объединить несколько изображений связанных друг с другом в одно изображение. Например, изображение может содержать составные части персонажа, бег, прыжок , стрельба , состояние покоя. Для этих целей Unity предоставляет Sprite Editor, который позволяет с извлекать элементы составного изображения.
Убедитесь, что графический объект, который вы хотите отредактировать, имеет тип текстуры, заданный для Sprite (2D и UI).
Для текстур Sprite с несколькими элементами необходимо, чтобы режим Sprite был установлен на Multiple in Inector.
Откройте редактор спрайтов
1. Выберите 2D-изображение, которое вы хотите отредактировать, из Project View
![]()
Вы не можете редактировать спрайт, который находится в режиме просмотра из сцены.
2. Нажмите кнопку «Редактор спрайтов» в Инспекторе импорта и отобразится редактор спрайтов.
![]()
Установите режим Sprite в Multiple в Inspector Import Text, если ваше изображение имеет несколько элементов.
![]()
Вы можете видеть только кнопку «Редактор спрайтов», если для параметра «Тип текстуры» для выбранного изображения установлено значение «Спрайт».
Кроме составного изображения, вы увидите другие элементы управления в редакторе. Слайдер в правом верхнем углу управляет приближением, в то время как кнопка с цветными полосками слева от него изменяет отображение альфа-канала и обычного вида изображения. Самый важный элемент управления это меню Slice в левом верхнем углу, который предоставляет опции для автоматической нарезки элементов изображения. Кнопки Apply and Revert позволяют вам сохранить или отменить сделанные изменения.
Использование редактора
Самый простой способ использования редактора — идентифицировать элементы вручную. Если вы нажмете на изображение, вы увидите прямоугольную область выделения с ручками в углах. Вы можете перетащить ручки или края прямоугольника, чтобы изменить его вокруг определенного элемента. Выделив элемент, вы можете добавить другой, перетащив новый прямоугольник в отдельную часть изображения. Вы заметите, что когда вы выбрали прямоугольник, в правом нижнем углу окна появится панель:
![]()
Элементы управления на панели позволяют выбрать имя для спрайта и задать положение и размер прямоугольника по его координатам. Ширина границы, для левой, верхней, правой и нижней, может быть указана в пикселях. Существуют также настройки для оси спрайта, которые Unity использует как начало координат и основную «опорную точку» графического объекта. Вы можете выбрать из нескольких позиций по умолчанию для прямоугольника.
Кнопка Trim рядом с пунктом меню Slice изменит размер прямоугольника так, чтобы он плотно касался края изображения на основе прозрачности. Границы поддерживаются только для системы пользовательского интерфейса, а не для 2D SpriteRenderer.
Автоматическая нарезка
Изоляция прямоугольников спрайтов работает хорошо, но во многих случаях Unity может сэкономить вам работу, обнаружив спрайты и извлекая их автоматически. Если вы нажмете на меню Slice на панели управления, вы увидите эту панель:
![]()
Если тип разреза установлен на «Автоматически», редактор попытается угадать границы элементов спрайтов по прозрачности. Вы можете установить пивот по умолчанию для каждого идентифицированного спрайта. В меню «Метод» вы можете выбрать, как работать с существующими выборами в окне. Опция «Удалить существующий» просто заменит все, что уже выбрано, Smart попытается создать новые прямоугольники, сохранив или отредактировав существующие, и Safe добавит новые прямоугольники, не изменив ничего уже на месте.
Параметры сетки по размеру ячейки или сетке по ячейкам также доступны для типа разреза. Это очень полезно, когда спрайты уже были выложены в обычном шаблоне во время создания:
![]()
Значения размера пикселя определяют высоту и ширину плиток в пикселях. Если вы выбрали сетку по количеству ячеек, Column & Row определяет количество столбцов и строк, используемых для нарезки. Вы также можете использовать значения смещения, чтобы сдвинуть положение сетки в левом верхнем углу изображения и значения заполнения, чтобы немного вставить прямоугольники спрайтов из сетки. Pivot может быть настроен с одним из девяти предустановленных мест или может быть установлено местоположение пользовательского поворота.
Обратите внимание, что после использования любого из методов автоматического разреза создаваемые прямоугольники все еще можно редактировать вручную. Вы можете позволить Unity обрабатывать грубое определение границ спрайта и шарниров, а затем выполнять любую необходимую точную настройку самостоятельно.
Прайс-лист
В Unisender есть все для рассылок: можно создавать и отправлять клиентам письма и SMS, настроить чат-бота и делать рассылки в Telegram и даже собрать простой лендинг для пополнения базы контактов.
Прайс-лист — это список предлагаемых товаров или услуг с указанием их стоимости и небольшим описанием. Стандартный документ представляет собой таблицу в электронном или бумажном формате.

Для чего нужен прайс-лист
Прайс-листы играют важную роль для бизнеса:
Демонстрируют открытость и прозрачность работы. Честная компания не придумывает цены и не меняет их в зависимости от платежеспособности клиента. Она учитывает себестоимость товаров и услуг, необходимую наценку, конкуренцию на рынке, соотношение спроса и предложения и другие факторы. Наличие прайс-листа подтверждает, что у бизнеса есть определенная ценовая политика, которая закреплена документально. Это вызывает больше доверия у клиентов.
Если с товарами всё просто и понятно, то с услугами — очень по-разному. Бывают ситуации, когда невозможно учесть всё в рамках стандартного прайса. Например, в нашем контент-агентстве нет чёткого прайс-листа, на сайте указаны цены «от ХХХ рублей», но фактически цена может быть и в три раза выше, чем ХХХ, и в два раза ниже.
Мы оцениваем тематику, с которой предстоит работать, объёмы необходимого предварительного исследования, возможность получить информацию от клиента, какие-то дополнительные моменты, например, вёрстку материалов на сайте — нюансов много и в каждом проекте они свои. Поэтому мы всегда оцениваем трудозатраты по каждому проекту отдельно. В нашей сфере это нормально и вовсе не значит, что компаниям без чёткого прайса нельзя доверять :).
сооснователь контент-агентства 4X
Исключают возможность торгов. Прайс определяет конкретную стоимость каждого товара. Покупатели могут торговаться и пытаться сбить цену, но продавец не обязан давать скидку.
Информируют аудиторию. Прайс-лист позволяет клиентам знакомиться с ассортиментом, стоимостью каждого товара или услуги, их основными характеристиками, специальными предложениями. Вся эта информация собрана в одном документе, что значительно экономит время в процессе продаж.
Упрощают клиентам выбор. Потребители используют прайс-листы, чтобы спланировать бюджет, сравнить предложения конкурирующих компаний и выбрать самый подходящий вариант.
Облегчают внутреннюю работу бизнеса. У компании может быть несколько версий прайса: для обычных покупателей, дилеров, VIP-клиентов, крупных оптовиков. То есть для разной аудитории бизнес предлагает разные цены. Наличие готовых разных прайсов упрощает работу отдела продаж с отдельными сегментами клиентов, особенно в сфере B2B .
Из чего состоит прайс-лист
У прейскурантов нет строгой общей формы, поэтому компании составляют документ на свое усмотрение: включают или опускают те или иные разделы, разрабатывают уникальный дизайн, выбирают подходящий формат. Примерная структура прайса для покупателей выглядит так:
- Название документа.
- Наименование организации.
- Адрес.
- Контактные данные (телефон, электронный адрес, сайт).
- Список продуктов.
- Единицы измерения.
- Стоимость одной единицы.
- Артикул.
- Спецпредложения (если они есть).
- Срок действия прайса.
- Подписи уполномоченных лиц.
- Печать организации.
- Сведения о договоре (если прайс считается приложением к нему).
В документе желательно отметить, что стоимость не является публичной офертой. Тогда продавец сможет поменять цену, когда ему это понадобится. Например, при резком подорожании расходных материалов, чтобы не продавать себе в убыток. Если такой отметки нет, потребитель имеет право требовать купить товар по прайсовой цене.
Виды прайс-листов
В зависимости от целей использования прайс-листы бывают 5 видов.
Информационный. Нужен для ознакомления покупателей с ассортиментом, стоимостью товаров или услуг. Такой прейскурант в основном используют компании с большим количеством продукции: супермаркеты, оптовые склады, крупные магазины стройматериалов.
В документе обычно очень много позиций, поэтому здесь указывают только ключевые для покупателей данные: название продукта, его краткое описание и стоимость. Каждый раздел состоит из десятков страниц, их принято нумеровать. По просьбе клиента компания может предоставить весь документ или распечатать интересующую часть прайса.

Презентационный. Основная задача этого прайс-листа — дать информацию о группе продуктов или конкретном товаре/услуге. Документ подходит для презентации новинок и описания товарных линеек. Здесь указывают более подробные характеристики (состав, цвет и другие уникальные особенности), добавляют фото и цены.
Презентационный прейскурант часто используют в прямых продажах и рекламных кампаниях: его публикуют в соцсетях, включают в почтовую рассылку, размещают на уличных щитах, раздают будущим партнерам при личной встрече.

Акционный. Этот прайс-лист используют в тех случаях, когда надо обратить внимание аудитории на конкретные продукты со сниженной стоимостью. Чтобы нужная информация визуально отличалась от остальных сведений в документе, спецпредложение выделяют более крупным шрифтом, другим цветом, отметкой об акции и скидке. Для обозначения выгоды в прайсе указывают две цены на продукт — обычную и акционную.

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

Прайс-лист для внутреннего пользования. Он предназначен для сотрудников компании . Во внутреннем прайсе дополнительно указывают себестоимость продуктов, вилку скидок и наценок, информацию о поставщиках и другие значимые для работы сведения. Этот вариант документа полезен для маркетологов, бухгалтеров, глав подразделений, специалистов по снабжению. Его используют для конкурентного анализа, установки цен, маркетинга и управления компанией.
Рекомендации по разработке прайс-листа
Прайс-лист — это важный маркетинговый инструмент. От него зависят конверсия , объемы продаж и прибыль. Чтобы документ работал эффективно, его надо правильно оформить .
Для этого следуйте советам:
Сделайте документ легким для восприятия. Прайс-лист должен быть простым и понятным для покупателей и персонала. Выбирайте хорошо читаемые шрифты, не делайте их слишком мелкими или крупными, не злоупотребляйте их количеством. Откажитесь от броских цветов, используйте заливку умеренно. Не ставьте чересчур много звездочек, стрелок и других подобных отметок. Пишите простые и понятные тексты.
Добавьте изображения. По возможности вставляйте в документ небольшие фотографии товара — это привлечет внимание покупателей и сделает прайс интереснее.
Не дублируйте похожие позиции. Если товары или услуги однотипные, оставьте только один продукт, чтобы не путать читателей. В примечаниях можно указать, что к покупке доступны и другие вариации.
Включите самое необходимое. Указывайте только важные для клиента сведения. Лишняя информация будет отвлекать внимание читателя и сделает сам прайс-лист еще объемнее. В то же время данных должно быть достаточно для принятия решения о покупке, поэтому слишком сокращать документ не стоит.
Для разной аудитории ключевые параметры будут различаться. Оптовикам и дистрибьюторам важно знать габариты упаковки для организации крупных отгрузок. А для физлиц, которые покупают товар поштучно, имеют значение цена, красочное описание, фотография продукта. Составляйте прайс с учетом того, кто именно будет его читать.
Сделайте удобную структуру. Чтобы прайс был интуитивно понятным для клиентов, разделите все позиции на категории. Например, «продукты питания», «бытовая химия», «одежда» и «канцелярия». Если в каждой категории слишком много товаров, разбейте их на подгруппы: «мясо», «овощи», «фрукты», «десерты», «молочная продукция».
Расставьте акценты. Новые продукты отмечайте пометкой «новинка» или «new», самые продаваемые позиции выделяйте фразой «хит продаж». Упоминайте о скидках, пишите обычную и акционную цены.
Оставьте контакты. Добавьте физический адрес организации, номер телефона и электронную почту, оставьте ссылки на социальные сети и сайт. Чтобы пользователю было удобно перейти по ним в один клик, разместите QR-код. Так клиенты смогут оперативно связаться с вами и уточнить все вопросы.
Сделайте сноски. Если вы предлагаете особые условия оплаты и доставки, расскажите об этом в примечаниях, чтобы избежать недопонимания со стороны покупателей. Например, что доставка не входит в стоимость и рассчитывается отдельно.
Поддерживайте актуальность. Если вы периодически обновляете прайс-лист, указывайте в документе дату последних изменений или срок действия текущей версии. Покупателю важно знать, до какого времени актуальны указанные цены.
Сделать прайс быстро и красиво, сэкономить время и деньги на подрядчиках помогут графические сервисы. В них много готовых шаблонов для бьюти-мастеров, консультантов и других экспертов.