背景
關於游戲開發多語言話工具,游戲開發完成,想要多渠道分發,語言多樣化,比如:英語,法語,日本,等等,實現多種語言隨意切換,滿足各種玩家的閱讀能力。此時,便是用到這個工具的時候。
原理:多語言顯示並不是在線翻譯,而是將不同語種進行事先的翻譯,放入到表格中,當游戲先選中某種語言,則會加載翻譯好的語言文本,然后在查找到對應的文本顯示出來,我們就看到了當前語言下的文本內容。
這里對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