Unity 经典案例 之 UI界面中英多语言本地化实现。Unity界面中,由于国家不同,界面需要不同字体语言,例如中国一本中文,美国一般英文;本节介绍如中英UI自由切换的UI界面的简单案例,具体如下
工具/原料
Unity
UGUI
一、知识要点
1、Resources.Load:1)函数类型public static 蚪嬷吃败ObjectLoad(stringpath);2)参数解释pathPathname of the target folder. When using the empty string (i.e., ""), the function will load the entire contents of the Resources folder.3)功能描述Loads an asset stored atpathin a Resources folder.Returns the asset atpathif it can be found otherwise returns null. Only objects oftypewill be returned if this parameter is supplied. Thepathis relative to any Resources folder inside the Assets folder of your project, extensions must be omitted.4)使用案例using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour { void Start() { GameObject go = GameObject.CreatePrimitive(PrimitiveType.Plane); Renderer rend = go.GetComponent<Renderer>(); rend.material.mainTexture = Resources.Load("glass") as Texture; }}
2、Dictionary:1)使用形式Dict坡纠课柩ionary<string, string>是一个泛型2)功能缛傍晷情描述他本身有集合的功能有时候可以把它看成数组,他的结构是这样的:Dictionary<[key], [value]>,他的特点是存入对象是需要与[key]值一一对应的存入该泛型通过某一个一定的[key]去找到对应的值4)使用案例//实例化对象Dictionary<int, string> dic = new Dictionary<int, string>();//对象打点添加//1、2、3是键,分别对应“one”“two”“one”dic.Add(1, "one");dic.Add(2, "two");dic.Add(3, "one");//提取元素的方法//上面代码中分别把值赋给了a,b,cstring a = dic[1];string b = dic[2];string c = dic[3];4)实用注意注意,键相当于找到对应值的唯一标识,所以不能重复;但是值可以重复
3、Split()函数:功能字符串拆分,具体使用可点击下面链接参考
二、经典案例 之 UI界面自由切换中英多语言
1、该功能实现的工程大概如下图,后面一一讲解实现过程,具体如下图
2、UI界面的实现,一个简单的标题,两个按钮,并对应添上相应的文字(也可以大概写一下区别开来,最后文字信息从文本里提取),具体如下图
3、可以在电脑上新建两个文本分别命名为“Chinese”和“Engl坡纠课柩ish”,内容存储UI文字对应信息的中英文(记得保存揍茏壅混文本时选择UTF-8,不然Unity不识别中文),再拖到工程里的“Resources”-“LanguageTxt”文件夹下,具体如下图
4、“Chinese”文本内容如下(记得保存文本时选择UTF-8,不然Unity不识别中文):Title:多语言本地化案例Play:游戏开始Quit:退出游戏
5、“English”文本内容如下:Title:Multi-language localization DemoPlay:Play GameQuit:Quit
6、在“Scripts”新建两个脚本,分别命名为“LanguageManager”、“UIText”,分别用来提取“Resources”里面的文本信息、对应提取文本信息显示在UI上,具体如下图
7、“LanguageManager”脚本编辑代码,首先设置一个枚举与脚本名称对上,工语言选择,接着设置一个字典来存储从对应文本上读取的文本信息,最后一个公有函数,方便外界调用字典存储的文字信息,具体代码及代码说明如下图
8、“LanguageManager”脚本具体内容如下:using System.Collections.Gener足毂忍珩ic;using UnityEngine;public enum Language { Chinese, English,}public class LanguageManager :MonoBehaviour { public Language language; private Dictionary<string, string> dict = new Dictionary<string, string>(); private static LanguageManager instance; public static LanguageManager Instance { get { return instance; } } private void Awake() { instance = this; GetLanguageContent(language); } public void GetLanguageContent(Language lan) { TextAsset ta = Resources.Load<TextAsset>("LanguageTxt/" + lan.ToString()); if (ta == null) { Debug.Log("语言文件为空,请检查"); return; } string[] lines = ta.text.Split('\n'); foreach (string str in lines) { if (string.IsNullOrEmpty(str)) { continue; } string[] s = str.Split(':'); dict.Add(s[0], s[1]); Debug.Log(s[0]+" "+s[1]); } } public string LanguageSetUIText(string key) { if (!dict.ContainsKey(key)) { return string.Empty; } else { return dict[key]; } }}
9、“UITest”脚本编辑代码,首先设置一个键用来指定获取的值,然后调用“languageManager”的公有接口,获得对应的字典值的文字信息,具体代码及代码说明如下图
10、“LanguageManager”脚本具体内容如下:using UnityEngine;using UnityE荏鱿胫协ngine.UI;public delegate void DelegateGetText();public class UIText : MonoBehaviour { [SerializeField] private string key; // Use this for initialization void Start () { GetTextLanguage(); } // Update is called once per frame void Update () { } public void GetTextLanguage() { if (!string.IsNullOrEmpty(key)) { string value = LanguageManager.Instance.LanguageSetUIText(key); if (!string.IsNullOrEmpty(value)) GetComponent<Text>().text = value; } }}
11、脚本编译正确,回到Unity界面,在场景中新建一个“GameObject”,命名为“LanguageManarger”,把“LanguageManager”脚本赋给它,设置语言为“English”,具体如下图
12、把“UIText”脚本分别赋给UI标题、两个按钮的Text,其中标题的“key = Title”,两个按钮对应的为“key = Play”、“key = Quit”,具体如下图
13、运行场景,即可看到原先中文的UI界面变成了英文界面,然后再把语言设置为“Chinese”就变成了中文界面显示,具体如下图
14、到此,《Unity 经典案例 之 UI界面自由切换中英多语言》讲解结束,谢谢