背景
关于游戏开发多语言话工具,游戏开发完成,想要多渠道分发,语言多样化,比如:英语,法语,日本,等等,实现多种语言随意切换,满足各种玩家的阅读能力。此时,便是用到这个工具的时候。
原理:多语言显示并不是在线翻译,而是将不同语种进行事先的翻译,放入到表格中,当游戏先选中某种语言,则会加载翻译好的语言文本,然后在查找到对应的文本显示出来,我们就看到了当前语言下的文本内容。
这里对TextMesh,Text (UI),TextMeshPro TextMeshProUGUI,Renderer,Image,RawImage以及音频进行了支持,操作方便简单,有对应的上手Demo,可直接上手接入。
/// <summary>
/// Load localized strings to the memory.
/// </summary>
public static void Load()
{
var sheet = SheetParser.LoadFromPath(PathProvider.SheetPath, SheetParser.Delimiter.Comma);
LocalizedStrings.Clear();
for (var i = 1; i < sheet.Count; i++)
{
var id = sheet[i][0];
if (string.IsNullOrEmpty(id)) continue;
if (LocalizedStrings.ContainsKey(id)) throw new Exception($"<b>[Localizer]</b> Text ID \"<b>{id}</b>\" is duplicated. Please check your localization sheet.");
var strings = sheet[i].ToList();
strings.RemoveAt(0);
strings = strings.Select(s => s.Replace("\\n", "\n"))
.Select(s => s.Replace("\r", ""))
.ToList();
LocalizedStrings.Add(id, strings);
}
LanguageList = sheet[0].Select(s => s.Replace("\r", "")).ToList();
LanguageList.RemoveAt(0);
Settings.LoadLanguageSettings();
ChangeLanguage(CurrentLanguageName ?? "");
}
/// <summary>
/// Change current language.
/// </summary>
/// <param name="languageName">ex. "Japanese" "English"</param>
public static void ChangeLanguage(string languageName)
{
var languageIndex = 0;
if (languageName != "")
{
languageIndex = GetLanguageIndex(languageName);
}
CurrentLanguageName = LanguageList[languageIndex];
Settings.SaveLanguageSettings();
}
/// <summary>
/// Activate Previous Language.
/// </summary>
/// <returns>Activated language name</returns>
public static string ActivatePreviousLanguage()
{
var prevIndex = (int)Mathf.Repeat(CurrentLanguageIndex - 1, LanguageList.Count);
ChangeLanguage(LanguageList[prevIndex]);
InjectAll();
return LanguageList[prevIndex];
}
简单的几个加载方法,语言切换方法。
涉及到的脚本,总体还不算多,功能相对全面,值得学习。
Demo_006 需要的可自取:
链接:https://pan.baidu.com/s/1CP4FLttldNHW-gW2zUrlDA
提取码:ncv6