LocalizationManager 本地化管理器。用于切换语言
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class LocalizationManager : SingletonAutoMono<LocalizationManager>
{
private Dictionary<string, string> localizedText;
private string missingTextString = "Localized text not found";
public void LoadLocalizedText(string languageName)
{
localizedText = new Dictionary<string, string>();
LocalizationData data;
ABResMgr.Instance.LoadResAsync<TextAsset>("localizationtext", languageName, (res) =>
{
if (res != null)
{
data = JsonUtility.FromJson<LocalizationData>(res.text);
foreach (var item in data.items)
{
localizedText.Add(item.key, item.value);
}
Debug.Log("Data loaded, dictionary contains: " + localizedText.Count + " entries");
}
else
{
Debug.Log("Data is Null");
}
});
}
public string GetLocalizedValue(string key)
{
if (localizedText.ContainsKey(key))
{
return localizedText[key];
}
else
{
return missingTextString;
}
}
public void SetLanguage(string languageCode)
{
switch (languageCode)
{
case "English":
LoadLocalizedText("English");
break;
case "Chinese":
LoadLocalizedText("Chinese");
break;
default:
LoadLocalizedText("English");
break;
}
// 刷新所有本地化文本
foreach (LocalizedText text in FindObjectsOfType<LocalizedText>())
{
text.Start();
}
}
}
[System.Serializable]
public class LocalizationData
{
public LocalizationItem[] items;
}
[System.Serializable]
public class LocalizationItem
{
public string key;
public string value;
}
LocalizedText 用于显示本地化文本, 需要TextMeshProUGUI
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class LocalizedText : MonoBehaviour
{
public string key;
TextMeshProUGUI text;
public void Start()
{
text = GetComponent<TextMeshProUGUI>();
if (text != null)
{
text.text = LocalizationManager.Instance.GetLocalizedValue(key);
}
}
private void OnEnable()
{
if (text != null)
{
text.text = LocalizationManager.Instance.GetLocalizedValue(key);
}
}
}
GameLaunch 游戏入口程序
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameLaunch : MonoBehaviour
{
public string language = "English"; // 默认语言;
public float musicValue;
public float soundValue;
void Start()
{
//设置本地化为中文
LocalizationManager.Instance.LoadLocalizedText(language);
//打开开始界面
UIMgr.Instance.ShowPanel<BeginPanel>();
//播放背景音乐
MusicMgr.Instance.PlayBKMusic("MainTheme");
//调整音乐音效大小
MusicMgr.Instance.ChangeBKMusicValue(musicValue);
MusicMgr.Instance.ChangeSoundValue(soundValue);
}
}
GameLaunchEditor 重写游戏入口程序在Inspector窗口的显示的编辑器脚本
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(GameLaunch))]
public class GameLaunchEditor : Editor
{
// 存储对目标脚本的引用
private GameLaunch gameLaunch;
// 定义语言选项
private string[] languageOptions = new string[] { "Chinese", "English" };
private void OnEnable()
{
// 获取目标脚本的引用
gameLaunch = (GameLaunch)target;
}
public override void OnInspectorGUI()
{
// 开始检查GUI的更改
EditorGUI.BeginChangeCheck();
// 自定义Inspector界面
EditorGUILayout.LabelField("GameLaunch——游戏入口", EditorStyles.boldLabel);
// 本地化选项
int selectedLanguageIndex = System.Array.IndexOf(languageOptions, gameLaunch.language);
if (selectedLanguageIndex == -1) selectedLanguageIndex = 0; // 如果找不到,默认选择第一个
selectedLanguageIndex = EditorGUILayout.Popup("选择语言", selectedLanguageIndex, languageOptions);
gameLaunch.language = languageOptions[selectedLanguageIndex];
// 创建输入字段
gameLaunch.musicValue = EditorGUILayout.Slider("背景音乐大小",gameLaunch.musicValue,0,1);
gameLaunch.soundValue = EditorGUILayout.Slider("音效大小",gameLaunch.soundValue,0,1);
// 检查是否有任何字段发生更改
if (EditorGUI.EndChangeCheck())
{
// 标记对象已更改
EditorUtility.SetDirty(gameLaunch);
if(EditorApplication.isPlaying)
{
MusicMgr.Instance.ChangeBKMusicValue(gameLaunch.musicValue);
MusicMgr.Instance.ChangeSoundValue(gameLaunch.soundValue);
LocalizationManager.Instance.SetLanguage(gameLaunch.language);
}
}
}
}