# Текстовые принтеры

Текстовые принтеры – это акторы, используемые для представления текстовых сообщений, выводимых (печатаемых) в течение некоторого времени.

Поведение принтеров может настраиваться через контекстное меню Naninovel -> Configuration -> Printers; для существующих вариантов см. руководство по конфигурации. Менеджер ресурсов принтеровдоступен в контекстном меню Naninovel -> Resources -> Printers.

В сценариях Naninovel текстовые принтеры, как правило, контролируется с помощью команд @print и @printer:

; Сделает принтер `Dialogue` принтером по умолчанию
@printer Dialogue

; Сделает принтер `Fullscreen` принтером по умолчанию
@printer Fullscreen

; Выведет фразу, используя принтер по умолчанию
@print text:"Lorem ipsum dolor sit amet."

; То же, что и выше, но используя универсальное текстовое выражение
Lorem ipsum dolor sit amet.

; То же, что и выше, но ассоциированное с персонажем "Felix"
Felix: Lorem ipsum dolor sit amet.

Имейте в виду, что даже несмотря на то, что встроенные принтеры реализованы как UI, они все еще являются акторами, и все связанные с акторами изменения видимости (анимации "показать/скрыть") используют длительности, заданные либо в соответствующих командах, либо в конфигурации актора: например, параметр time команды @showPrinter управляет длительностью анимации, а когда он не указан, свойство Change Visibility Duration конфигурации актора принтера используется в качестве длительности по умолчанию; свойство Fade Time из корня префаба UI принтера в этом случае игнорируется.

# Авточтение текста

Функция авточтения текста позволяет автоматически продолжать выполнение сценария при обработке команд i.

Ожидание ввода пользователем или команды "i" останавливает выполнение сценария до тех пор, пока пользователь не активирует ввод Continue, и обычно используются после выведения текстового сообщения. Когда вы находитесь в режиме авточтения текста, команды "i" вместо этого останавливают выполнение сценария на некоторое время, а затем заканчивают, позволяя выполнить следующую команду. Период остановки зависит от длины последнего напечатанного текстового сообщения и дополнительно изменяется настройкой игры "скорость печати" ("Print speed").

Режим авточтения текста можно переключить с помощью ввода AutoPlay (клавиша A по умолчанию для автономного модуля ввода) или кнопки "AUTO" на панели управления.

# Пропуск текста

Функция пропуска текста позволяет ускорить выполнение команд @print, эффективно пропуская процесс выведения (печати) текста.

Режим пропуска можно переключать с помощью ввода Skip (клавиша Ctrl по умолчанию для автономного модуля ввода) или кнопки "SKIP" на панели управления.

По умолчанию режим пропуска доступен только при выполнении команд, которые уже были выполнены в прошлом; например, если пользователь еще не прочитал текст, который будет напечатан, режим пропуска будет недоступен. Это можно изменить в настройках игры, используя настройку "Режим пропуска" ("Skip mode").

# Бэклог принтера

Бэклог принтера – это функция, позволяющая пользователю перечитывать ранее выведенный текст.

Бэклог может быть показан в любое время во время основного игрового процесса через ввод ShowBacklog (клавиша L по умолчанию для автономного модуля ввода) или по нажатию кнопки "LOG" на панели управления.

# Диалоговый принтер

Диалоговые принтеры представляют текст внутри окон с переменной высотой. Они изначально занимают около трети размера экрана и увеличивают высоту, когда содержимое требует больше места. Диалоговые принтеры также выводят имя связанного с репликой персонажа в виде метке над текстовым окном.

Dialogue Printer

# Широкий принтер

Широкие принтеры очень похожи на диалоговые принтеры, за исключением некоторых изменений в компоновке панелей, адаптированных для широких дисплеев. Широкие принтеры также поддерживают функцию аватаров персонажей.

Wide Printer

# Полноэкранный принтер

Полноэкранные принтеры представляют текст внутри окон со статическим размером. Они занимают большую часть размера экрана и предназначены для представления больших объемов текста (так называемый "NVL" режим).

Fullscreen Printer

Полноэкранные принтеры по умолчанию не сбрасывают текст при каждой последующей команде печати; вместо этого используйте команду @resetText для очистки содержимого принтера, когда это необходимо. Это можно изменить, включив функцию Auto Reset в меню конфигурации актора принтера.

Каждая команда печати, обрабатываемая полноэкранным принтером, по умолчанию вводит 2 разрыва строки перед напечатанным текстом (за исключением случаев, когда текущее содержимое принтера пусто). Это можно отключить в меню конфигурации актора принтера, установив Auto Line Break равным нулю.

Ниже приведен пример использования полноэкранного принтера.

; Активировать полноэкранный принтер.
@printer Fullscreen

; Следующие строки будут напечатаны в том же окне, разделенные двумя разрывами строк.
Lorem ipsum dolor sit amet. Proin ultricies in leo id scelerisque. 
Praesent vel orci luctus, tincidunt nisi et, fringilla arcu. In a metus orci. 
Maecenas congue nunc quis lectus porttitor, eget commodo massa congue.

; Очистить содержимое принтера.
@resetText

; Вывести текст снова.
Morbi ultrices dictum diam, in gravida neque vulputate in. 
...

# Чат-принтер

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

Chat Printer

При использовании универсальных текстовых строк и команд @print текст в целевом принтере по умолчанию сбрасывается (очищается). В случае с чат-принтерами это приведет к удалению всех сообщений при добавлении нового, что в большинстве случаев может быть нежелательно. Установка параметра reset в значение false предотвратит очистку принтера, например:

@print "Orci varius natoque penatibus." author:Kohaku reset:false
@print "Integer ullamcorper fringilla ipsum a scelerisque." author:Yuko reset:false

— выведет два сообщения без очистки содержимого принтера.

# Баббл-принтер

Баббл-принтеры могут использоваться для презентации текста в стиле манги/комиксов.

Встроенный баббл-принтер поддерживает два варианта внешнего вида: "Left" и "Right", которые можно использовать для подстраивания направления принтера в зависимости от того, с какой стороны он расположен относительно персонажа.

@printer Bubble.Left pos:42,80 visible:false time:0
@show Bubble wait:false
Misaki: Aliquam lobortis!
@char Nanikun.Happy wait:false
@printer Bubble.Right pos:53,55 visible:false time:0
@show Bubble wait:false
Nanikun: Integer nec maximus elit, eget posuere risus.

Чтобы одновременно отображать более одного баббл-принтера (или любого другого), добавьте пользовательские принтеры.

# Добавление пользовательских принтеров

Вы можете добавлять пользовательские текстовые принтеры на основе встроенных шаблонов или создавать новые принтеры с нуля. Например, давайте рассмотрим настройку встроенного шаблона Dialogue.

Используйте контекстное меню ассетов Create -> Naninovel -> Text Printers -> Dialogue, чтобы создать префаб диалога вне пакета Naninovel, например в папке Assets/TextPrinters.

Отредактируйте префаб: измените шрифт, текстуры, добавьте анимацию и т. д. Для получения дополнительной информации о доступных инструментах построения UI обратитесь к документации Unity для uGUI. Есть также несколько обучающих видеороликов и пример проекта по работе с uGUI в руководстве по настройке UI.

Предоставьте префаб ресурсам движка через GUI менеджера принтеров, которые доступен через контекстном меню Naninovel -> Resources -> Printers. Добавьте новую запись с помощью кнопки + (плюс), введите ID актора (может отличаться от имени префаба) и дважды щелкните запись, чтобы открыть настройки актора. Перетащите префаб принтера в поле Resource.

Теперь вы можете использовать новый текстовый принтер, активировав его с помощью команды @printer и указав ID актора, установленный в менеджере.

@printer MyNewPrinter

ПРИМЕР

Пример добавления пользовательского принтера см. в разделе демо-проекта. Префаб хранится как Assets/Prefabs/PimpedPrinter.prefab; принтер появляется в демо, когда Кохаку-тян пытается создать свой собственный: 3

Кроме того, можно создать принтер с нуля, вручную реализовав интерфейс ITextPrinterActor. См. руководство по реализации пользовательских акторов для получения дополнительной информации.

При изменении текстового компонента имейте в виду, что высота строк меньше 1,0 не поддерживается (в этом случае визуализируемые строки будут перекрываться, что делает невозможным применение эффекта раскрытия). Рассмотрите возможность редактирования самого шрифта текста, чтобы уменьшить вертикальное перекрытие.

# Эффект проявления текста

По умолчанию при печати текстовых сообщений применяется эффект градиентного проявления. Однако если вы предпочитаете более традиционный стиль "пишущей машинки", вы можете отключить эффект затухания, отключив Slide Clip Rect и установив свойство Reveal Fade Width в компоненте Revealable Text равным нулю. Компоненты Revealable Text применяются к текстовым объектам в некоторых встроенных принтерах; например, вы можете найти его прикрепленным к игровому объекту Fullscreen/Content/Printer/Text префаба принтера Fullscreen.

# Звук проявления текста

Для встроенных принтеров, поддерживающих эффект проявления (в настоящее время Dialogue, Fullscreen и Wide), вы можете дополнительно установить SFX для воспроизведения при выведении символов.

Следуйте приведенному выше руководству "добавление пользовательских принтеров", чтобы создать пользовательский принтер на основе любого из встроенных принтеров, затем найдите компонент Revealable Text Printer Panel, прикрепленный к корневому объекту префаба, и используйте свойство Reveal Sfx, чтобы настроить воспроизведение SFX при обнаружении символа. Актуальный список доступных опций основан на аудиоресурсах, которые вы добавили через меню Naninovel -> Resources -> Audio.

Вы также можете использовать свойство списка Chars SFX для сопоставления нескольких SFX с определенными символами. На следующем рисунке представлена настройка, где SFX "Keystroke2" будет воспроизводиться для пробелов, "Explosion" – для символов D, d, F, 1, 4, 9 и *, никакой SFX не будет воспроизводиться для символа %, а "Keystroke1" будет воспроизводиться для всех остальных символов.

Кроме того, вы можете установить Message Sound в меню конфигурации персонажей, чтобы воспроизводить определённые для персонажа звуки при выведении текста, когда этот персонаж является автором сообщения (независимо от того, какой текстовый принтер печатает это сообщение). В случае, если и Message Sound автора сообщения, и Reveal Sfx принтера по умолчанию назначены, Message Sound будет воспроизводиться вместо Reveal SFX принтера по умолчанию. Chars SFX, если он назначен, всегда будет воспроизводиться, независимо от того, указан ли Message Sound автора или нет.

Звуки выведения текста воспроизводятся очень часто (в зависимости от скорости выведения сообщения) и обрезаются при последующем воспроизведении одного и того же звука, поэтому убедитесь, что соответствующие аудиоклипы очень короткие и резкие (без какой-либо паузы/тишины в начале).

В случае, если звуки выведения не работают для вас (например, звук недостаточно короток, чтобы воспроизводить его на выведении каждого символа), возможно использование событий OnPrintTextStarted и OnPrintTextFinished в сервисе движка TextPrinterManager для запуска/остановки циклического воспроизведения звука соответственно. Эти события также доступны PlayMaker, если вы предпочитаете использование визуального скриптинга.

# TextMesh Pro

Naninovel поддерживает TextMesh Pro через встроенные TMProFullscreen, TMProDialogue, TMProWide и TMProBubble принтеры, реализованные с текстовыми компонентами UI TMPro.

Перед использованием принтеров TMPro убедитесь, что в вашем проекте Unity установлен TextMesh Pro. TextMesh Pro можно установить с помощью диспетчера пакетов, доступного через меню Window -> Package Manager.

Вы можете выбрать принтеры TMPro, чтобы направить на них все команды печати, используя команду @printer в сценариях Naninovel:

; Активировать диалоговый принтер TMPro
@printer TMProDialogue
; Вывести текст, используя активированный принтер
Hello World!

При создании пользовательских ассетов шрифтов или материалов TextMesh Pro не забудьте применить шейдер Naninovel/RevealableTMProText к материалу шрифта, иначе эффект проявления текста не будет работать.

# Стили текста

Различные стили текста могут быть применены с помощью тегов Rich text, размещенных прямо внутри текста, или с помощью команды @style.

Текстовые принтеры по умолчанию (не TMPro) основаны на системе рендеринга текста Unity и поддерживают основные стили текста, такие как цвет, размер, полужирный, курсив и т.д. См. руководство по текстовым тегам для получения дополнительной информации.

Принтеры TextMesh Pro поддерживают широкий спектр дополнительных текстовых тегов. См. официальную документацию для получения дополнительной информации.

Поддержка Ruby (фуригана) символов также предоставляется TextMesh Pro принтерами Naninovel с помощью пользовательского тега <ruby>. Оформите текст, над которым должны быть помещены символы Ruby, в тег Ruby, затем укажите текст Ruby внутри тега, например:

Lorem <ruby="VERY">ipsum</ruby> dolor sit amet. 

— Ruby текст "VERY" появится прямо над словом "ipsum" при выведении текста во время выполнения.

Вы можете дополнительно управлять размером и смещением текста Ruby по вертикали, изменяя свойства компонента RevealableTMProText, прикрепленного к префабам принтеров.

Ниже приводится видео-демонстрация тегов Ruby в действии.

Обновлено: October 5, 2020