Unity — один из самых популярных игровых движков среди независимых разработчиков. Это мощный инструмент, открывающий доступ в игровую индустрию даже самым мелким издателям и разработчикам-одиночкам.
Проблема независимого пути в том, что нужно всегда пытаться соответствовать стандартам и нагрузке больших коллективов. Unity облегчает задачу, упрощая процесс разработки, чтобы с ней мог справиться один человек.
Это относится и к локализации, благодаря которой вы можете познакомить со своей игрой весь мир. Однако нужно быть осторожным, ведь локализация игры — сложный процесс. Давайте рассмотрим наилучший способ выполнить её в Unity.
Smart Localization (бесплатная и платная версии)
Хорошим началом локализации проекта Unity будет выбор готового расширения под названием Smart Localization, разработанного janeTech. У расширения есть две версии: бесплатная и платная версия Pro.
Вот что можно доверить Smart Localization:
И на этом всё. Даже не тратьте время на использование функции перевода, предоставленной Microsoft Translator. Автор говорит, что она предназначена только для создания временных переводов в процессе разработки, а не финальных переводов. Но даже при её использовании в этом качестве она может вызвать проблемы с длиной текстовых строк и размером игровых элементов.
I2 Localization (45$)
Среди платных ассетов определённо полезным будет I2 Localization, разработанный игровой студией Inter Illusion.
Наиболее удобными функциями этого ассета являются синхронизация с электронными таблицами Google и автоматическое отображение текста справа налево для арабского.
«I2 Localization в целом прекрасный инструмент для локализации. [...] Первое и главное — это возможность импорта данных непосредственно из Таблиц Google даже после выпуска игры. Это чрезвычайно полезно, потому что большинство компаний-локализаторов отдаёт результаты в файле Excel, который можно быстро перенести в Таблицы Google и импортировать все данные.
Вторая функция, которую я люблю, позволяет обрабатывать hardcoded-текст в коде. Вместо того, чтобы создавать конструкции из циклов или switch, можно использовать единственную строку для перевода текста: I2.Loc.ScriptLocalization.Get(»");".
Дэниел Бэтофф
Оба расширения популярны среди разработчиков Unity (в особенности бесплатная версия Smart Localization, по понятным причинам). Это полезные инструменты, но применяйте их аккуратно. Ни одно расширение не решит всех вопросов локализации, и уж точно не выполнит процесс локализации за вас.
Поэтому…
От этого никуда не уйти, если вы серьёзно настроены продавать свою игру на иностранных рынках. Вам нужны профессиональные переводчики видеоигр, и чем раньше вы начнёте с ними работать, тем лучше.
Подготовьте первый черновик переводов ещё до начала разработки.
Вы сэкономите кучу времени, если займётесь кодингом игры после того, как процесс локализации будет выполнен. Уделите особое внимание длине слов и предложений в каждом переводе по сравнению с английской версией (или другим базовым языком). Так вы сможете внести в дизайн необходимые правки или снова обратиться к переводчику и поработать над альтернативами.
Если вы займётесь локализацией после завершения разработки, то это обернётся кошмаром.
После начала разработки первое, что нужно сделать с точки зрения локализации — выбрать способ форматирования текстовых строк. Здесь вы делаете выбор не только с точки зрения разработки: это определит, насколько просто или сложно будет добавлять новые языки в игру в будущем или изменять существующие переводы.
Unity поддерживает множество форматов, самые популярные из них это:
Можно также создать свой собственный формат, если хотите. Однако при этом вероятны ошибки, и это один из самых сложных вариантов для локализации. Поэтому в этой статье мы не будем его рассматривать.
Если вы разрабатываете игру на JavaScript, то правильнее всего будет использовать JSON. Это простой и лёгкий формат, используемый множеством разработчиков в течение долгих лет. Кроме того, он быстр в обработке. Кроме преимуществ для разработчика, он очень лёгок в чтении даже для тех, кто не занимается разработкой. Это важный плюс для будущих переводов и правок.
Многие разработчики по-прежнему работают с XML, и это хороший выбор, если вы предпочитаете работать именно с этим языком разметки. Это не самый эффективный язык и его сложнее читать, так что учтите это при создании игры.
С точки зрения переводов другие варианты значительно более проблематичны, но вам нужно придерживаться того языка, который наиболее удобен. Плотно взаимодействуйте с переводчиком, чтобы как можно больше упростить его работу, потому что это снизит количество ошибок.
Подбор самого эффективного способа структурирования строк может стать настоящей проблемой. Для этого процесса нет чётко заданных инструкций. Unity предоставляет разработчику свободу в выборе структуры. Свобода — это, конечно, всегда хорошо, но она и увеличивает вероятность ошибок.
Существует три основных фактора, влияющих на структуру строк:
Язык
Для большинства игр (в которых выбор языка сохраняется в самом начале) можно хранить строки в отдельных файлах для каждого языка (например, en.json, es.json, fr.json и т.д.). Это наиболее продуктивный способ разделения строк по языкам, чтобы игре не требовалось обрабатывать ненужные дополнительные файлы.
Идентификаторы строк
Затем нужно подумать об идентификаторах строк. Объём этой задачи сильно зависит от количества текстовых строк в игре. Стремитесь предугадывать проблемы при создании ID строк, давая каждой из них уникальный подробный идентификатор, позволяющий с лёгкостью найти нужную строку в будущем.
В основном выбор зависит от личных предпочтений, но не забывайте, что в будущем с вашим кодом могут работать другие разработчики.
Текст
Всегда создавайте строки с учётом будущей локализации. Наиболее частые ошибки: разная длина строк в различных языках и отсутствие подходящего перевода для строк. Не позволяйте им снижать качество скрипта, но укорачивание или перефразирование могут помочь в будущем.
Если вы выберете такой подход, процесс сохранения и загрузки локализованных строк станет гораздо проще. Вы не только снизите таким образом рабочую нагрузку, но и уменьшите риск возникновения ошибок.
Unity позволяет создавать компоненты, что значительно уменьшает объём разрабатываемого вручную кода. Это также снижает риск возникновения ошибок и экономит время.
Подробно о компонентах можно почитать на странице ресурсов Unity. Однако в этой статье мы сосредоточимся только на нескольких задачах:
Благодаря компонентам Unity можно решить все четыре задачи одним простым действием!
Большинству игроков достаточно один раз выбрать язык и закончить на этом. Один из вариантов: определить местоположение пользователя и выбрать по умолчанию местный язык. Однако, возможно, придётся добавить экран с запросом подтверждения языка при первом запуске игры. Например, не для всех американцев английский язык родной.
Способ выбора дизайна и реализации этой возможности больше относится и к UX, и к локализации. Здесь важно сохранить выбранное игроком значение (если оно было выбрано) и сохранить его как новое значение по умолчанию. После этого вам не придётся задавать один и тот же вопрос при каждом запуске игры.
Чтобы сделать это в Unity, можно создать компонент Master для назначения языка по умолчанию. Если пользователь решает сменить настройку языка, то новый язык назначается компоненту и обрабатывается как язык по умолчанию.
Этого не избежать, и локализация визуальных элементов игры может стать пыткой. Первое, о чём нужно подумать — это шрифты. Важен не только их внешний вид, но и поддерживаемые ими языки. Вот какие аспекты нужно рассмотреть:
Стиль, конечно же, важен для бренда вашей игры. Вы можете найти шрифт, отлично выглядящий на английском, но не поддерживающий нужные вам языки. Тогда вам придётся принять решение: будете ли вы искать один шрифт, поддерживающий все языки, или будете использовать различные шрифты для разных языков?
Это зависит от количества языков, которые вы хотите поддерживать. Поиск шрифтов с диакритическими символами (для испанского, французского, итальянского и т.д.) не очень сложен. Но вы замучаетесь искать один шрифт, поддерживающий, например, несколько европейских языков и азиатские системы отображения. И даже если вы его найдёте, размер файла будет очень велик. Поэтому не бойтесь подбирать отдельные шрифты для разных языков, если вам нравятся их стили.
Конечно, не все тексты должны быть обязательно заданы в коде. Некоторые текстовые элементы представлены в графике. Кроме того, существуют другие различные визуальные элементы, о которых тоже нужно подумать.
Текстовая графика
Большинство элементов текстовой графики вообще не требует локализации. Например, имена персонажей остаются одинаковыми во всех языках (если вы не будете их локализовать). Поэтому всю графику с их именами (например, бейджи, значки игроков и т.д.) можно оставить неизменной.
Однако, значимые имена, в которых, например, есть метафоры или игра слов, тоже, возможно, потребуют локализации, в противном случае некоторые игроки не смогут оценить шутку. Конечно же, нужно подумать не только об именах персонажа, но и о названиях уровней, оружия и игровых предметов.
Самое важное — не пропустить текстовую графику, влияющую на геймплей. Это может быть что-то простое, вроде элемента UI внутри мини-игры, но вы будете жалеть о том, что упустили такие мелкие детали.
Как локализовать текстовую графику в Unity
Определившись с текстовой графикой, которую нужно локализовать (и с той, которую нужно оставить в покое), с помощью Unity вы сможете с лёгкостью переключаться между типами графики на основе выбранного пользователем языка. Есть три способа, каждый из которых имеет свои плюсы и минусы:
Если вы сможете справиться с такой нагрузкой, мы рекомендуем создавать атласы в упаковщике спрайтов Unity. Таким образом вы сохраните качественный внешний вид, при этом обеспечив производительность. Недостаток такого подхода в большей нагрузке по созданию атласов, но упаковщик спрайтов ускоряет эту работу.
Можно достичь такого же визуального уровня, создавая отдельную локализованную графику и вызывая её при необходимости, но это наименее эффективный подход. Если вы не будете аккуратны, игра будет работать слишком медленно.
Ещё один вариант — полностью заменить графику текстовыми строками и элементами UI. Они могут выглядеть не так хорошо, как графика, но это самый экономный с точки зрения ресурсов подход, позволяющий максимизировать скорость работы игры. Также его можно встроить в стандартный процесс локализации, передав переводчику тексты вместе с другими локализуемыми строками.
Бандлы AssetBundle в Unity позволяют создавать пакеты файлов, загружаемые пользователями только при необходимости. Это значит, что можно значительно уменьшить общий размер игры, в то же время предоставив полные ресурсы для любой аудитории.
Например, пользователи будут загружать только тексты на французском, если этот язык выбран основным в игре. В противном случае им не нужны эти файлы, которые будут храниться на серверах, ожидая скачивания.
Это не только значительно повышает скорость благодаря снижению количества загружаемых ресурсов, но и делает игры меньше и быстрее, что позволяет скачивать их в первую очередь. Но самое лучшее, что вам не приходится идти на компромиссы в отношении файлов и ресурсов, создаваемых для локализации. Можно предоставлять игры любой нужной аудитории и при этом знать, что пользователей не будут ограничивать ненужные им ресурсы.
Итак, это была инструкция для начинающих по локализации игр в Unity. Плохие новости в том, что невозможно выполнить её в одиночку – вам необходимы профессиональные переводчики. Однако, есть и хорошие новости: Unity делает управление процессом локализации гораздо проще.
Но движок всё-таки не может научить вас делать локализацию правильно, так что обратитесь к тем, кто поможет вам адаптировать игры под иностранную аудиторию.
Проблема независимого пути в том, что нужно всегда пытаться соответствовать стандартам и нагрузке больших коллективов. Unity облегчает задачу, упрощая процесс разработки, чтобы с ней мог справиться один человек.
Это относится и к локализации, благодаря которой вы можете познакомить со своей игрой весь мир. Однако нужно быть осторожным, ведь локализация игры — сложный процесс. Давайте рассмотрим наилучший способ выполнить её в Unity.
1. Используйте расширения Smart Localization и I2 Localization (но аккуратно)
Smart Localization (бесплатная и платная версии)
Хорошим началом локализации проекта Unity будет выбор готового расширения под названием Smart Localization, разработанного janeTech. У расширения есть две версии: бесплатная и платная версия Pro.
Вот что можно доверить Smart Localization:
- Создание структуры папок для разных языков.
- Импорт и экспорт файлов
И на этом всё. Даже не тратьте время на использование функции перевода, предоставленной Microsoft Translator. Автор говорит, что она предназначена только для создания временных переводов в процессе разработки, а не финальных переводов. Но даже при её использовании в этом качестве она может вызвать проблемы с длиной текстовых строк и размером игровых элементов.
I2 Localization (45$)
Среди платных ассетов определённо полезным будет I2 Localization, разработанный игровой студией Inter Illusion.
Наиболее удобными функциями этого ассета являются синхронизация с электронными таблицами Google и автоматическое отображение текста справа налево для арабского.
«I2 Localization в целом прекрасный инструмент для локализации. [...] Первое и главное — это возможность импорта данных непосредственно из Таблиц Google даже после выпуска игры. Это чрезвычайно полезно, потому что большинство компаний-локализаторов отдаёт результаты в файле Excel, который можно быстро перенести в Таблицы Google и импортировать все данные.
Вторая функция, которую я люблю, позволяет обрабатывать hardcoded-текст в коде. Вместо того, чтобы создавать конструкции из циклов или switch, можно использовать единственную строку для перевода текста: I2.Loc.ScriptLocalization.Get(»");".
Дэниел Бэтофф
Оба расширения популярны среди разработчиков Unity (в особенности бесплатная версия Smart Localization, по понятным причинам). Это полезные инструменты, но применяйте их аккуратно. Ни одно расширение не решит всех вопросов локализации, и уж точно не выполнит процесс локализации за вас.
Поэтому…
2. Наймите профессиональных переводчиков
От этого никуда не уйти, если вы серьёзно настроены продавать свою игру на иностранных рынках. Вам нужны профессиональные переводчики видеоигр, и чем раньше вы начнёте с ними работать, тем лучше.
Подготовьте первый черновик переводов ещё до начала разработки.
Вы сэкономите кучу времени, если займётесь кодингом игры после того, как процесс локализации будет выполнен. Уделите особое внимание длине слов и предложений в каждом переводе по сравнению с английской версией (или другим базовым языком). Так вы сможете внести в дизайн необходимые правки или снова обратиться к переводчику и поработать над альтернативами.
Если вы займётесь локализацией после завершения разработки, то это обернётся кошмаром.
3. Выберите правильный формат текстовых строк
После начала разработки первое, что нужно сделать с точки зрения локализации — выбрать способ форматирования текстовых строк. Здесь вы делаете выбор не только с точки зрения разработки: это определит, насколько просто или сложно будет добавлять новые языки в игру в будущем или изменять существующие переводы.
Unity поддерживает множество форматов, самые популярные из них это:
- JSON
- XML
- YAML
- CSV
Можно также создать свой собственный формат, если хотите. Однако при этом вероятны ошибки, и это один из самых сложных вариантов для локализации. Поэтому в этой статье мы не будем его рассматривать.
Если вы разрабатываете игру на JavaScript, то правильнее всего будет использовать JSON. Это простой и лёгкий формат, используемый множеством разработчиков в течение долгих лет. Кроме того, он быстр в обработке. Кроме преимуществ для разработчика, он очень лёгок в чтении даже для тех, кто не занимается разработкой. Это важный плюс для будущих переводов и правок.
Многие разработчики по-прежнему работают с XML, и это хороший выбор, если вы предпочитаете работать именно с этим языком разметки. Это не самый эффективный язык и его сложнее читать, так что учтите это при создании игры.
С точки зрения переводов другие варианты значительно более проблематичны, но вам нужно придерживаться того языка, который наиболее удобен. Плотно взаимодействуйте с переводчиком, чтобы как можно больше упростить его работу, потому что это снизит количество ошибок.
4. Определитесь со структурой строк
Подбор самого эффективного способа структурирования строк может стать настоящей проблемой. Для этого процесса нет чётко заданных инструкций. Unity предоставляет разработчику свободу в выборе структуры. Свобода — это, конечно, всегда хорошо, но она и увеличивает вероятность ошибок.
Существует три основных фактора, влияющих на структуру строк:
- Язык
- Идентификаторы (ID) строк
- Текст
Язык
Для большинства игр (в которых выбор языка сохраняется в самом начале) можно хранить строки в отдельных файлах для каждого языка (например, en.json, es.json, fr.json и т.д.). Это наиболее продуктивный способ разделения строк по языкам, чтобы игре не требовалось обрабатывать ненужные дополнительные файлы.
Идентификаторы строк
Затем нужно подумать об идентификаторах строк. Объём этой задачи сильно зависит от количества текстовых строк в игре. Стремитесь предугадывать проблемы при создании ID строк, давая каждой из них уникальный подробный идентификатор, позволяющий с лёгкостью найти нужную строку в будущем.
В основном выбор зависит от личных предпочтений, но не забывайте, что в будущем с вашим кодом могут работать другие разработчики.
Текст
Всегда создавайте строки с учётом будущей локализации. Наиболее частые ошибки: разная длина строк в различных языках и отсутствие подходящего перевода для строк. Не позволяйте им снижать качество скрипта, но укорачивание или перефразирование могут помочь в будущем.
Если вы выберете такой подход, процесс сохранения и загрузки локализованных строк станет гораздо проще. Вы не только снизите таким образом рабочую нагрузку, но и уменьшите риск возникновения ошибок.
5. Создавайте большинство компонентов локализации в Unity
Unity позволяет создавать компоненты, что значительно уменьшает объём разрабатываемого вручную кода. Это также снижает риск возникновения ошибок и экономит время.
Подробно о компонентах можно почитать на странице ресурсов Unity. Однако в этой статье мы сосредоточимся только на нескольких задачах:
- Возможность смены языка пользователями
- Сохранение выбранного языка
- Автоматический выбор языка при перезапуске игры
- Загрузка правильной строки для каждого значения
Благодаря компонентам Unity можно решить все четыре задачи одним простым действием!
Большинству игроков достаточно один раз выбрать язык и закончить на этом. Один из вариантов: определить местоположение пользователя и выбрать по умолчанию местный язык. Однако, возможно, придётся добавить экран с запросом подтверждения языка при первом запуске игры. Например, не для всех американцев английский язык родной.
Способ выбора дизайна и реализации этой возможности больше относится и к UX, и к локализации. Здесь важно сохранить выбранное игроком значение (если оно было выбрано) и сохранить его как новое значение по умолчанию. После этого вам не придётся задавать один и тот же вопрос при каждом запуске игры.
Чтобы сделать это в Unity, можно создать компонент Master для назначения языка по умолчанию. Если пользователь решает сменить настройку языка, то новый язык назначается компоненту и обрабатывается как язык по умолчанию.
6. Локализация визуальных элементов в Unity
Этого не избежать, и локализация визуальных элементов игры может стать пыткой. Первое, о чём нужно подумать — это шрифты. Важен не только их внешний вид, но и поддерживаемые ими языки. Вот какие аспекты нужно рассмотреть:
- Стиль
- Языковая поддержка
- Размеры шрифтов
- Размеры файлов
Стиль, конечно же, важен для бренда вашей игры. Вы можете найти шрифт, отлично выглядящий на английском, но не поддерживающий нужные вам языки. Тогда вам придётся принять решение: будете ли вы искать один шрифт, поддерживающий все языки, или будете использовать различные шрифты для разных языков?
Это зависит от количества языков, которые вы хотите поддерживать. Поиск шрифтов с диакритическими символами (для испанского, французского, итальянского и т.д.) не очень сложен. Но вы замучаетесь искать один шрифт, поддерживающий, например, несколько европейских языков и азиатские системы отображения. И даже если вы его найдёте, размер файла будет очень велик. Поэтому не бойтесь подбирать отдельные шрифты для разных языков, если вам нравятся их стили.
Конечно, не все тексты должны быть обязательно заданы в коде. Некоторые текстовые элементы представлены в графике. Кроме того, существуют другие различные визуальные элементы, о которых тоже нужно подумать.
Текстовая графика
Большинство элементов текстовой графики вообще не требует локализации. Например, имена персонажей остаются одинаковыми во всех языках (если вы не будете их локализовать). Поэтому всю графику с их именами (например, бейджи, значки игроков и т.д.) можно оставить неизменной.
Однако, значимые имена, в которых, например, есть метафоры или игра слов, тоже, возможно, потребуют локализации, в противном случае некоторые игроки не смогут оценить шутку. Конечно же, нужно подумать не только об именах персонажа, но и о названиях уровней, оружия и игровых предметов.
Самое важное — не пропустить текстовую графику, влияющую на геймплей. Это может быть что-то простое, вроде элемента UI внутри мини-игры, но вы будете жалеть о том, что упустили такие мелкие детали.
Как локализовать текстовую графику в Unity
Определившись с текстовой графикой, которую нужно локализовать (и с той, которую нужно оставить в покое), с помощью Unity вы сможете с лёгкостью переключаться между типами графики на основе выбранного пользователем языка. Есть три способа, каждый из которых имеет свои плюсы и минусы:
- Создание атласов в упаковщике спрайтов (Sprite Packer)
- Создание отдельной графики и вызов её при необходимости
- Замена графики текстом и элементами UI
Если вы сможете справиться с такой нагрузкой, мы рекомендуем создавать атласы в упаковщике спрайтов Unity. Таким образом вы сохраните качественный внешний вид, при этом обеспечив производительность. Недостаток такого подхода в большей нагрузке по созданию атласов, но упаковщик спрайтов ускоряет эту работу.
Можно достичь такого же визуального уровня, создавая отдельную локализованную графику и вызывая её при необходимости, но это наименее эффективный подход. Если вы не будете аккуратны, игра будет работать слишком медленно.
Ещё один вариант — полностью заменить графику текстовыми строками и элементами UI. Они могут выглядеть не так хорошо, как графика, но это самый экономный с точки зрения ресурсов подход, позволяющий максимизировать скорость работы игры. Также его можно встроить в стандартный процесс локализации, передав переводчику тексты вместе с другими локализуемыми строками.
7. Используйте AssetBundle движка Unity
Бандлы AssetBundle в Unity позволяют создавать пакеты файлов, загружаемые пользователями только при необходимости. Это значит, что можно значительно уменьшить общий размер игры, в то же время предоставив полные ресурсы для любой аудитории.
Например, пользователи будут загружать только тексты на французском, если этот язык выбран основным в игре. В противном случае им не нужны эти файлы, которые будут храниться на серверах, ожидая скачивания.
Это не только значительно повышает скорость благодаря снижению количества загружаемых ресурсов, но и делает игры меньше и быстрее, что позволяет скачивать их в первую очередь. Но самое лучшее, что вам не приходится идти на компромиссы в отношении файлов и ресурсов, создаваемых для локализации. Можно предоставлять игры любой нужной аудитории и при этом знать, что пользователей не будут ограничивать ненужные им ресурсы.
Итак, это была инструкция для начинающих по локализации игр в Unity. Плохие новости в том, что невозможно выполнить её в одиночку – вам необходимы профессиональные переводчики. Однако, есть и хорошие новости: Unity делает управление процессом локализации гораздо проще.
Но движок всё-таки не может научить вас делать локализацию правильно, так что обратитесь к тем, кто поможет вам адаптировать игры под иностранную аудиторию.
Поделиться с друзьями