Перейти к основному содержимому

Инструмент субтитров

Инструмент субтитров

Система субтитров для Unity, работающая в рантайме: поддержка SRT и ASS, стилизация, анимации и пулинг ради производительности.

Купить в Unity Asset Store: Subtitles Player — SSA, ASS, SRT

Обзор​

  • Поддерживает SRT (простые субтитры по таймкодам) и ASS (богатая стилизация и анимация).
  • Работает в рантайме, отрисовка идёт через TextMeshPro.
  • Управление шрифтами через FontsContainer; в комплекте готовые префабы и примеры.
  • Представления ASS-субтитров переиспользуются из пула, чтобы не плодить аллокации, когда на экране много строк.

Возможности подробно​

  • Два формата: SRT — когда нужно быстро, ASS — когда нужны стили, позиционирование и анимация.
  • Шрифты и стили: централизованный список шрифтов в FontsContainer; ASS-стили задают цвета, обводку, тени и положение.
  • Пулинг: ShowAssSubtitles переиспользует объекты представлений (SubtitleViewPool, до 32 сохраняемых), снижая нагрузку на сборщик мусора.
  • Компонентный подход: готовые компоненты для SRT и ASS, базовые классы для расширения.

Как пользоваться​

Воспроизведение разделено на два компонента: плеер разбирает файл и ведёт время, отображение его рисует.

  1. Добавьте плеер — SRTSubtitlePlayer или AssSubtitlePlayer — на игровой объект и назначьте ему Subtitle File (TextAsset).
  2. Добавьте на тот же канвас соответствующий компонент отображения:
    • ShowSRTSubtitles — назначьте Subtitle Player и Text (TextComponentWrapper).
    • ShowAssSubtitles — назначьте Subtitle Player, Text Prefab (префаб с AssSubtitlePartView) и Fonts Container. Разместите его на объекте с CanvasScaler: опорное разрешение берётся из ASS-скрипта в Start.
  3. (ASS) Убедитесь, что в FontsContainer лежат шрифты, на которые ссылается ASS-файл.
  4. Управляйте воспроизведением через Play() / Pause() / Continue() / Stop() на плеере.
Компонент субтитров в инспекторе

Канвас с назначенными SRT Subtitle Player (файл субтитров, текущее время, состояние воспроизведения) и Show SRT Subtitles (ссылки на обёртку текста и плеер).

Короткие примеры​

Управление воспроизведением находится на компоненте-плеере, а не на компоненте Show….

SRT

var player = GetComponent<SRTSubtitlePlayer>();

player.Play(); // начать с 00:00
player.Play(12.5f); // начать с 12,5 секунды
player.Pause(); // остановить, сохранив текущую позицию
player.Continue(); // продолжить с места паузы
player.Stop(); // остановить и перемотать в начало

ASS

var player = GetComponent<AssSubtitlePlayer>();
player.Play();

if (player.IsPlaying)
Debug.Log($"At {player.CurrentTime:F2}s");

Файл субтитров — это сериализованное поле TextAsset, назначаемое в инспекторе; API для подмены файла в рантайме нет. Чтобы проиграть другой файл, используйте отдельный экземпляр плеера (или префаб на каждый файл) и включайте нужный.

Субтитры во время воспроизведения

Субтитры в окне Game в режиме Play; кнопки Play / Pause / Continue управляют плеером.

Компоненты​

  • ShowSRTSubtitles / SRTSubtitlePlayer / SRTParser: конвейер SRT.
  • ShowAssSubtitles / AssSubtitlePlayer / AssParser / AssSubtitlePart / AssSubtitlePartView / AssStylesInfo / AssScriptInfo / AssFormat: конвейер ASS и стилизация.
  • SubtitlePlayer: базовый класс воспроизведения — Play / Pause / Continue / Stop, CurrentTime, IsPlaying, GetCurrentSubtitles.
  • FormatSubtitlePlayer<TParser>: создаёт парсер нужного формата в Awake; база для SRT- и ASS-плееров.
  • SubtitleDisplayBase<TPlayer>: общий цикл Update для компонентов отображения; переопределите OnSubtitlesUpdated, чтобы рисовать по-своему.
  • SubtitlesParser / SubtitlePart: контракт разбора и модель разобранной строки.
  • TextComponentWrapper: оборачивает TextMeshProUGUI и даёт ASS-рендереру доступ к тексту, цвету, обводке, тени, шрифту и выравниванию.
  • FontsContainer: ScriptableObject со списком шрифтов для ASS-стилей, создаётся через Assets > Create > ManakhovN > Subtitles > FontsContainer. Шрифт ищется по имени семейства TMP.
  • SubtitleViewPool: пул объектов представлений, используемый ASS-рендерером.

Советы​

  • SRT — для простых субтитров, ASS — когда нужны стили, позиционирование или анимация.
  • Держите шрифты в FontsContainer и ссылайтесь на них в ASS-стилях, чтобы не получить пропущенные глифы.
  • Ради производительности не раздувайте файлы субтитров; пулинг для ASS включён по умолчанию.
  • Тщательно проверяйте тайминги: расхождение FPS и таймкодов в ASS ломает синхронизацию.

Решение проблем​

  • Ничего не показывается: проверьте, что плееру назначен Subtitle File, что компонент отображения ссылается на этот плеер и что IsPlaying равно true — до вызова Play() ничего не рисуется.
  • Не подхватываются шрифты: добавьте шрифт в FontsContainer. Поиск идёт по имени семейства TMP-ассета, и оно должно совпадать с именем в ASS-стиле.
  • Просадки производительности: избегайте очень больших ASS-файлов; пул хранит не больше 32 объектов, сверх этого создаются новые.

Требования​

  • Unity 2020.3 или новее
  • Рантайм-инструмент (работает в сборках)
  • TextMeshPro — отрисовка идёт через TextMeshProUGUI; обычный Text из Unity UI не поддерживается

Поддержка​

По вопросам и пожеланиям пишите: nadirmanakhov@gmail.com


Другие инструменты: Редактор структур данных | Конвертер файлов | VCS Client