Содержание статьи

Поддержка русского языка в Unity требует настройки сразу нескольких компонентов: системы локализации, шрифтов, пользовательского интерфейса и форматов данных. Без корректной конфигурации кириллица может отображаться некорректно, строки – не обновляться при смене языка, а сборка – отличаться от поведения в редакторе. Поэтому важно понимать, какие инструменты Unity предоставляет из коробки и какие шаги необходимо выполнить вручную.
Начиная с версии Unity 2019.4, для локализации рекомендуется использовать официальный пакет Localization, доступный через Package Manager. Он позволяет хранить переводы в таблицах, управлять языками через Locale и синхронизировать текст, аудио и спрайты. Для русского языка дополнительно требуется настройка шрифтов с полной поддержкой Unicode и явное добавление кириллического диапазона символов.
Отдельного внимания требует работа с UI. Компоненты TextMeshPro, кнопки, выпадающие списки и динамически создаваемые элементы должны быть связаны с таблицами переводов, иначе язык не будет переключаться во время выполнения. Также необходимо учитывать особенности русской локали при отображении дат, чисел и денежных значений, так как Unity по умолчанию ориентируется на системные региональные настройки.
В этой статье рассматривается пошаговый процесс включения русского языка в Unity: от установки пакетов до проверки готового билда на разных платформах. Все рекомендации ориентированы на практическое применение в реальных проектах, включая мобильные и ПК-игры.
Выбор встроенной или сторонней системы локализации для проекта Unity
Для включения русского языка в Unity можно использовать официальный пакет Localization или сторонние решения, такие как I2 Localization или Smart Localization. Встроенный пакет поддерживается Unity, регулярно обновляется и интегрируется с Addressables, что упрощает загрузку переводов и управление памятью. Он подходит для проектов, где требуется локализация текста, спрайтов и аудио без глубокой переработки архитектуры.
Официальная система локализации работает через String Table и Locale, позволяя добавлять русский язык как отдельную локаль с кодом ru или ru-RU. Переключение языка выполняется централизованно, а все связанные UI-элементы обновляются автоматически при корректной привязке. Недостатком является более сложная первоначальная настройка и необходимость явного подключения компонентов к таблицам переводов.
Сторонние плагины часто предлагают упрощённый интерфейс редактирования переводов и поддержку CSV или Google Sheets. Это может быть полезно при работе с большим объёмом текстов и внешними переводчиками. Однако такие решения зависят от поддержки разработчика плагина и могут создавать сложности при обновлении Unity или сборке под консоли.
Для большинства проектов на Unity 2020 и новее рекомендуется использовать встроенный пакет локализации. Сторонние системы имеют смысл при наличии устоявшегося пайплайна переводов или необходимости функций, отсутствующих в стандартном решении. При выборе важно учитывать долгосрочную поддержку, совместимость с целевыми платформами и объём контента на русском языке.
Установка и настройка пакета Localization через Package Manager
Пакет Localization устанавливается через Unity Package Manager и доступен для версий Unity, начиная с 2019.4. Для установки необходимо открыть меню Window → Package Manager, переключиться в режим Unity Registry и найти пакет с названием Localization. После установки Unity автоматически добавит зависимости, включая поддержку Addressables.
После завершения установки требуется создать базовые настройки локализации. Это выполняется через меню Edit → Project Settings → Localization. Здесь задаётся список доступных языков и включается автоматическая инициализация системы при запуске сцены. Для русского языка необходимо добавить локаль с кодом ru или ru-RU, в зависимости от требований проекта.
| Параметр | Рекомендуемое значение |
|---|---|
| Locale Identifier | ru-RU |
| Default Locale | English или Russian |
| Initialize On Startup | Включено |
Для работы с текстами необходимо создать String Table Collection через Assets → Create → Localization → String Table Collection. В коллекции добавляется столбец для русского языка, после чего можно заполнять переводы. Ключи строк должны быть стабильными и не зависеть от языка, так как они используются в коде и UI-компонентах.
Завершающий этап настройки – добавление компонента Localization Settings в сцену, если он не был создан автоматически. Этот объект управляет текущей локалью во время выполнения и обеспечивает корректную загрузку таблиц. Без него переключение на русский язык не будет работать в билде, даже если в редакторе всё отображается корректно.
Подготовка шрифтов с поддержкой кириллицы в TextMeshPro
Для корректного отображения русского языка в Unity необходимо использовать шрифты, содержащие кириллический набор символов. При работе с TextMeshPro стандартные шрифты Unity не подходят, так как текст рендерится через Font Asset, создаваемый на основе исходного TTF или OTF файла. Перед импортом следует проверить, что шрифт включает диапазон Unicode для кириллицы.
Для динамических интерфейсов, где текст формируется из внешних источников или может изменяться во время выполнения, следует включить режим Dynamic при создании Font Asset. В этом случае TextMeshPro будет автоматически добавлять недостающие символы в атлас, что снижает риск отображения квадратиков вместо букв при использовании новых строк на русском языке.
После создания Font Asset его необходимо назначить всем компонентам TextMeshProUGUI и текстовым префабам. Дополнительно рекомендуется настроить Fallback Font Assets, если проект использует несколько шрифтов. Без этого отдельные символы кириллицы могут не отображаться в кнопках, подсказках или системных сообщениях.
Создание таблиц переводов для русского языка в Unity
Таблицы переводов в Unity создаются на основе String Table Collection, которая объединяет все языковые версии одного набора строк. Для русского языка необходимо заранее добавить локаль ru или ru-RU в настройках Localization, иначе соответствующий столбец не появится в коллекции. Создание коллекции выполняется через Assets → Create → Localization → String Table Collection.
Каждая строка в таблице определяется уникальным ключом, который используется в коде и UI-компонентах. Ключи должны быть стабильными и описывать назначение текста, а не его содержимое. Русские переводы вводятся в соответствующий столбец локали и хранятся в формате Unicode, поэтому дополнительной кодировки не требуется.
| Ключ | English | Russian (ru-RU) |
|---|---|---|
| menu_play | Play | Играть |
| menu_settings | Settings | Настройки |
| exit_confirm | Are you sure? | Вы уверены? |
Для проектов с большим объёмом текста рекомендуется группировать строки по смыслу, создавая несколько коллекций, например для интерфейса, подсказок и системных сообщений. Это упрощает навигацию и снижает риск ошибок при обновлении переводов на русский язык.
После заполнения таблиц необходимо сохранить ассеты и проверить, что они подключены к Localization Settings. Без этого строки на русском языке не будут загружаться в билде, даже если они корректно отображаются в редакторе.
Подключение русского языка к UI-элементам и Prefab-объектам

Для отображения русского языка в интерфейсе Unity каждый текстовый элемент должен быть связан с таблицей локализации. В проектах с TextMeshPro используется компонент Localize String Event, который добавляется к объекту с TextMeshProUGUI. В настройках компонента указывается String Table Collection и ключ строки, после чего текст автоматически обновляется при смене локали.
При работе с префабами важно настраивать локализацию до их размещения на сцене. Все UI-элементы внутри префаба должны иметь корректные ссылки на таблицы переводов, иначе при повторном использовании объекта текст может остаться на языке по умолчанию. После изменений префаб необходимо сохранить, чтобы русские строки применялись во всех сценах.
Динамически создаваемые UI-элементы требуют дополнительной проверки. Если объект создаётся через код, компонент Localize String Event должен быть добавлен программно или присутствовать в исходном префабе. В противном случае текст не будет реагировать на переключение на русский язык во время выполнения.
Отдельное внимание следует уделить размерам и выравниванию элементов интерфейса. Русские строки часто длиннее английских, поэтому рекомендуется использовать Auto Size в TextMeshPro и проверять переносы текста на кнопках, диалогах и подсказках. Это позволяет избежать обрезанных надписей и наложения элементов после включения русского языка.
Реализация переключения языка через код C# во время игры

Переключение русского языка в Unity через C# выполняется с использованием LocalizationSettings и объекта Locale. Основная задача – установить текущую локаль на русский и обновить все связанные UI-элементы в реальном времени. Это особенно важно для меню, диалогов и динамических текстов.
Типовой алгоритм действий выглядит так:
- Подключить пространство имён:
using UnityEngine.Localization;using UnityEngine.Localization.Settings;using UnityEngine.Localization.Tables;
- Получить локаль русского языка:
Locale russianLocale = LocalizationSettings.AvailableLocales.GetLocale("ru-RU");
- Присвоить её как текущую:
LocalizationSettings.SelectedLocale = russianLocale;
- Обновить все Localize String Event компоненты автоматически через систему локализации.
Для динамических объектов, создаваемых во время игры, важно убедиться, что префабы имеют компонент Localize String Event и корректный ключ строки. Если ключ отсутствует, текст не обновится после смены локали.
Дополнительно рекомендуется реализовать пользовательский интерфейс для выбора языка. Пример простого переключателя:
- Кнопка «Русский» вызывает метод
SetRussianLocale(), где выполняется присвоение SelectedLocale. - Кнопка «Английский» аналогично вызывает метод с кодом локали en.
Такой подход гарантирует мгновенное обновление текста, не требует перезагрузки сцены и поддерживает любой контент, подключённый к таблицам переводов, включая подсказки, уведомления и системные сообщения.
Настройка форматов дат, чисел и валюты для русской локали

В Unity стандартные методы форматирования дат и чисел используют системные региональные настройки, что может приводить к некорректному отображению для русского языка. Чтобы гарантировать правильное представление дат, чисел и валюты, рекомендуется использовать CultureInfo из пространства имён System.Globalization.
Пример настройки локали для русского языка:
- Импортировать пространство имён:
using System.Globalization;using System.Threading;
- Создать объект культуры:
CultureInfo russianCulture = new CultureInfo("ru-RU");
- Установить его как текущую для потока:
Thread.CurrentThread.CurrentCulture = russianCulture;Thread.CurrentThread.CurrentUICulture = russianCulture;
После этого:
- Методы
ToString("C")будут отображать валюту в рублях с запятой как разделителем десятичных и пробелом для тысяч. - Методы
ToString("D")иToString("dd.MM.yyyy")корректно форматируют дату по российскому стандарту. - Дробные числа будут использовать запятую как десятичный разделитель.
Проверка отображения русского языка в билде под разные платформы

Рекомендуется выполнять проверку по следующему алгоритму:
- Собрать проект для каждой целевой платформы отдельно – Windows, macOS, Android, iOS. Проверять как 64-битные, так и 32-битные сборки при необходимости.
- Запустить сборку и пройти все сцены с текстовыми элементами, динамическими окнами и диалогами. Особое внимание уделять префабам и объектам, создаваемым через код.
- Проверить корректность всех UI-компонентов TextMeshPro: отсутствие квадратиков вместо букв, правильное выравнивание текста, корректное отображение переносов.
- Тестировать переключение языка во время выполнения, чтобы убедиться, что LocalizationSettings.SelectedLocale применяет русский язык для всех связанных строк.
- При необходимости использовать Fallback Font Assets, чтобы избежать пропусков символов на мобильных платформах и консолях.
Если обнаруживаются проблемы, их нужно исправлять в исходных ассетах: проверять Font Asset, корректность ключей в таблицах переводов и настройки локализации в сцене. Регулярная проверка билда на всех платформах позволяет исключить ситуации, когда русские тексты отображаются правильно в редакторе, но некорректно на устройстве пользователя.
Вопрос-ответ:
Почему в сборке на Android некоторые русские буквы отображаются как квадратики, хотя в редакторе всё нормально?
Проблема обычно связана с шрифтом TextMeshPro. В редакторе используется полный Font Asset, а в билде могут отсутствовать необходимые символы кириллицы. Решение — создать Font Asset с диапазоном Unicode 0400–04FF, включить режим Dynamic, а также настроить Fallback Font Assets для элементов, которые могут использовать другие шрифты. После этого кириллица будет отображаться корректно на всех платформах.
Как подключить русский язык к динамически создаваемым UI-элементам через код?
Для динамических объектов необходимо добавлять компонент Localize String Event при создании объекта через C#. В коде создают объект, присваивают TextMeshProUGUI и указывают ключ строки из таблицы переводов. После установки локали через LocalizationSettings.SelectedLocale текст обновится автоматически. Если компонент не добавить, текст останется на языке по умолчанию.
Можно ли использовать один Font Asset для английского и русского текста, чтобы не создавать отдельные шрифты?
Да, но нужно убедиться, что шрифт поддерживает весь набор символов обоих языков. В TextMeshPro при создании Font Asset следует указать диапазон Unicode для латиницы и кириллицы. Если текст динамический, рекомендуется включить Dynamic Font Asset, чтобы недостающие символы добавлялись автоматически. Это упрощает работу с UI и уменьшает количество ассетов в проекте.
Как правильно оформить таблицу переводов для большого проекта с русским языком?
Для крупных проектов рекомендуется разбивать String Table Collection на логические группы: интерфейс, подсказки, системные сообщения. Каждая строка должна иметь уникальный ключ, который не зависит от языка. В таблице добавляется столбец для русской локали, где указываются переводы. Такой подход упрощает поиск, редактирование и предотвращает ошибки при подключении текста к UI.
Каким образом настроить формат даты и чисел для русского языка без изменения системных настроек?
Используется класс CultureInfo из System.Globalization. Создаётся объект с кодом «ru-RU» и присваивается CurrentCulture и CurrentUICulture текущему потоку. После этого методы ToString(«dd.MM.yyyy») для даты и ToString(«C») для валюты автоматически используют русские форматы: запятую как разделитель десятичных, пробел для тысяч и символ рубля. Такой способ работает независимо от региональных настроек операционной системы.
