Управляемый текст
Функция управляемого текста позволяет управлять (с помощью замены) различными текстовыми элементами, используемыми в Naninovel, такими как UI в игре и именами персонажей, используя локализуемые документы.
Для создания управляемого текстового документа, используйте инструмент для управляемого текста, доступный через контекстное меню Naninovel -> Tools -> Managed Text
.
Используя кнопку "Select", выберите путь для хранения управляемых текстовых документов (по умолчанию это Resources/Naninovel/Text
) и нажмите кнопку "Generate" для создания документов.
Вы также можете создать пользовательский управляемый текстовый документ с помощью контекстного меню ассета Create -> Naninovel -> Managed Text
.
Каждая строка в управляемом текстовом документе представляет собой выражение в следующем формате: Path: Value, где Path – путь к текстовой переменной, а Value – значение этой переменной. Например, вот изначальное содержимое документа "DefaultUI", который содержит записи для встроенного UI:
Вы можете изменить значения, и эти изменения будут применены при следующем запуске.
Включение свойства Delete Unused
приведет к удалению записей в управляемых текстовых документах, на которые нет прямых ссылок ни через компоненты ManagedTextProvider
, ни через атрибуты ManagedText
в исходном коде (подробнее об этом ниже).
Провайдер управляемого текста
Возможна привязка произвольного игрового объекта Unity к управляемой текстовой записи без каких-либо скриптов с помощью компонента ManagedTextProvider
; добавьте компонент к игровому объекту, укажите категорию (имя документа, который будет содержать запись), ключ (имя записи внутри документа), затем используйте событие OnValueChanged
для привязки значения к свойству игрового объекта.
Ниже приведен пример привязки управляемой текстовой записи, хранящейся в документе "MyCustomDocument", с ключом "MyCustomText" к компоненту Unity "Text".
Если компонент ManagedTextProvider
используется в пользовательском UI, текстовом принтере или обработчике выбора, соответствующие записи будут автоматически сгенерированы при использовании инструмента для управляемого текста (учитывая, что ресурсы назначены в меню конфигурации); в других случаях вам придется добавлять записи вручную.
Переменные управляемого текста
Также возможно связать управляемые текстовые записи с переменными в исходном коде. Для этого необходимо добавить атрибут ManagedText
для статичного строкового поля в скрипте на C#. Его значение будет перезаписано значением, указанным в управляемом текстовом документе при инициализации движка.
Ниже приведен пример использования управляемой текстовой переменной для локализации текстовой метки в скрипте C#.
using Naninovel;
using UnityEngine.UI;
// Наследуем наш класс от текстового компонента Unity, так что мы можем использовать его таким же образом.
public class CustomLabel : Text
{
// Значение управляемой текстовой записи "CustomLabel.LabelText" будет присвоено
// приведенной ниже переменной при инициализации движка и обновлении при изменении локали.
[ManagedText("MyCustomUI")] // "MyCustomUI" – имя управляемого текстового документа, в котором будет храниться запись.
public static string LabelText = "Default Value"; // "Default Value" – исходное значение записи.
protected override void Awake ()
{
base.Awake();
text = LabelText; // Присвоить метке текущее значение управляемой текстовой записи.
// Обновить метку, когда пользователь меняет локаль в процессе выполнения.
Engine.GetService<ILocalizationManager>().OnLocaleChanged += _ => text = LabelText;
}
}
Текст сценариев
Можно получать управляемые текстовые значения непосредственно из сценариев Naninovel. Это может быть удобно, когда требуется использовать некоторый текст в выражениях скриптов, и текст должен быть локализуемым.
Создайте управляемый текстовый документ с именем "Script" и добавьте записи, используя ключи с префиксом T_
или t_
. Теперь можно ссылаться на значения в выражениях скрипта; например, учитывая следующие записи в управляемом текстовом документе "Script":
T_Greeting1: Hey!
T_Greeting2: Hello!
T_Greeting3: Hi!
— вы можете сослаться на данные значения следующим образом:
@print {Random(T_Greeting1,T_Greeting2,T_Greeting3)}
Конечно, управляемый текстовый документ "Script" может быть локализован так же, как и другие документы; поэтому, когда пользователь выберет другую локаль, на текст автоматически будет ссылаться соответствующий локализованный документ.
Локализация
Процесс локализации управляемого текста похож на процесс локализации сценариев Naninovel:
- Сгенерируйте (создайте, отредактируйте) необходимые управляемые текстовые документы в папке
Resources/Naninovel/Text
. - Запустите программу локализации в папке локали (
Resources/Naninovel/Localization/{Locale}
, где{Locale}
– тег целевой локали). - Документы локализации для исходных управляемых текстовых документов появятся в соответствующей папке локали. Используйте их для добавления или редактирования перевода.
Чтобы обновить управляемые текстовые документы и их соответствующие аналоги в локалях, сначала запустите утилиту создания управляемого текста в папке Resources/Naninovel/Text
, а затем утилиту локализации в папке Resources/Naninovel/Localization/{Locale}
. Обе утилиты по умолчанию будут пытаться сохранить все существующие модификации (управляемые текстовые записи и их переводы), так что вам не придется переписывать все с нуля при каждом обновлении.
См. локализацию для дополнительной информации о том, как использовать утилиту локализации.
EXAMPLE
Пример настройки локализации (включая управляемый текст) вы можете найти в демо-проекте. Вы можете использовать его в качестве референса в случае возникновения проблем с настройкой локализации в вашем собственном проекте.