当要实现游戏中多种语言选择时,如果单个修改则非常麻烦;所以简便的方法即为将多种语言放于不同文件,按选择的语言进行加载;当然图片上的文字不同此方法实现。
1. 语言文件的准备
将要进行可选择的语言列表放于不同文件,本次格式采用key=value格式,每个对之后换行。如下为中文和英文:
2. 本地文件管理
加载运用单利模式,根据所选择的语言进行加载放于Resources文件夹下的Localization文件夹下,如图
可用其中的Language属性对语言进行选择。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LocalizationManager {
private static LocalizationManager _instance;
public static LocalizationManager Instance
{
get
{
if(_instance==null)
{
_instance = new LocalizationManager();
}
return _instance;
}
}
public void Init()
{//DoNothing
}
private const string Chinese = "Localization/Chinese";
private const string English = "Localization/English";
public const string Language = English;//只用改变此处的值,就可实现改变语言
private Dictionary<string, string> dict;
private LocalizationManager()
{
dict = new Dictionary<string, string>();
TextAsset ta = Resources.Load<TextAsset>(Language);
string[] lines = ta.text.Split('\n');
foreach(string line in lines)
{
if(string.IsNullOrEmpty(line)==false)
{
string[] keyvalues = line.Split('=');
dict.Add(keyvalues[0], keyvalues[1]);
}
}
}
public string GetValue(string key)
{
string value;
dict.TryGetValue(key, out value);
return value;
}
}
3. 语言改变
新建了一个脚本,挂于所有语言需要改变文字的含有Text组件对象上,并输入此组件对应的key,语言文本文件中=前即为key值。控制language就可改变语言。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
///此脚本挂于场景中含有Text的对象上,用于改变文字
public class LocalizationText : MonoBehaviour {
// Use this for initialization
public string key;
private void Awake()
{
LocalizationManager.Instance.Init();//为实例化出单例对象
}
void Start () {
string value = LocalizationManager.Instance.GetValue(key);
GetComponent<Text>().text = value;
}
}
示例如图:
运行后: