unity3d 文本多语言实现
2015-11-03 21:21
405 查看
基本原理就是UILabel 的文字通过读取配置文件显示.(通过配置文件读取就可以让策划去配置拉... 策划莫怪我咯......)
第一步: 建立: Resources/Language/zh_cn.txt 文件, zh_cn.txt 里面是以键值对的方式存储.如
select_role=[ffffff]选择角色[-]
nick_label=昵称:
............
其中 key 就是 UILabel 的 name ,value 就是将要显示的文本. [fffff] 表示颜色,[-] 表示结尾
第二步: 建立与UILabel 绑定的组件, Language.cs
public class Language : MonoBehaviour
{
bool isStarted = false;
void Start ()
{
isStarted = true;
}
void OnEnable()
{
if (!isStarted)
{
UILabel lab = gameObject.GetComponent<UILabel>();
LanguageManager.SetText(ref lab, lab.text);
}
}
} 你还可以修改: UILable 增加 [RequireComponent(typeof(Language))]
第三步: 建一个统一管理语言的管理类:LanguageManager.cs
public class LanguageManager
{
//static private LanguageManager instance;
private static Dictionary<string, string> dictLang = new Dictionary<string, string>();
private static bool needLoad = true;
static public void LoadTxt()
{
if(needLoad)
{
TextAsset txt = BundleMemManager.Instance.loadResource("Language/zh_cn", typeof(TextAsset)) as TextAsset;
char[] split = { '\r', '\n' };
string[] lines = txt.text.Split(split, StringSplitOptions.RemoveEmptyEntries);
int len = lines.Length;
for (int i = 0; i < len; i++)
{
string[] langDef = lines[i].Split('=');
if (langDef.Length == 2)
{
if (dictLang.ContainsKey(langDef[0]))
{
Loger.Error("key error {0}", langDef[0]);
}
else
{
dictLang.Add(langDef[0].Trim(), langDef[1].Trim());
}
}
}
needLoad = false;
}
}
static public void SetText(ref UILabel label, string name)
{
if (dictLang.ContainsKey(name))
{
label.text = dictLang[name];
}
else
{
label.text = name;
}
}
static public string GetText(string name)
{
if (dictLang.ContainsKey(name))
{
return dictLang[name];
}
else
{
return name;
}
}
}注意: LoadTxt 方法要游戏一启动时初始化.(可以加一下当前系统的语言环境,读取不同的配置文件.)
OK, 多语言基本上完成了.
第一步: 建立: Resources/Language/zh_cn.txt 文件, zh_cn.txt 里面是以键值对的方式存储.如
select_role=[ffffff]选择角色[-]
nick_label=昵称:
............
其中 key 就是 UILabel 的 name ,value 就是将要显示的文本. [fffff] 表示颜色,[-] 表示结尾
第二步: 建立与UILabel 绑定的组件, Language.cs
public class Language : MonoBehaviour
{
bool isStarted = false;
void Start ()
{
isStarted = true;
}
void OnEnable()
{
if (!isStarted)
{
UILabel lab = gameObject.GetComponent<UILabel>();
LanguageManager.SetText(ref lab, lab.text);
}
}
} 你还可以修改: UILable 增加 [RequireComponent(typeof(Language))]
第三步: 建一个统一管理语言的管理类:LanguageManager.cs
public class LanguageManager
{
//static private LanguageManager instance;
private static Dictionary<string, string> dictLang = new Dictionary<string, string>();
private static bool needLoad = true;
static public void LoadTxt()
{
if(needLoad)
{
TextAsset txt = BundleMemManager.Instance.loadResource("Language/zh_cn", typeof(TextAsset)) as TextAsset;
char[] split = { '\r', '\n' };
string[] lines = txt.text.Split(split, StringSplitOptions.RemoveEmptyEntries);
int len = lines.Length;
for (int i = 0; i < len; i++)
{
string[] langDef = lines[i].Split('=');
if (langDef.Length == 2)
{
if (dictLang.ContainsKey(langDef[0]))
{
Loger.Error("key error {0}", langDef[0]);
}
else
{
dictLang.Add(langDef[0].Trim(), langDef[1].Trim());
}
}
}
needLoad = false;
}
}
static public void SetText(ref UILabel label, string name)
{
if (dictLang.ContainsKey(name))
{
label.text = dictLang[name];
}
else
{
label.text = name;
}
}
static public string GetText(string name)
{
if (dictLang.ContainsKey(name))
{
return dictLang[name];
}
else
{
return name;
}
}
}注意: LoadTxt 方法要游戏一启动时初始化.(可以加一下当前系统的语言环境,读取不同的配置文件.)
OK, 多语言基本上完成了.
相关文章推荐
- Kinect结合Unity3D引擎开发体感游戏(一)
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D动态对象优化代码分享
- unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)
- Unity3D游戏引擎实现在Android中打开WebView的实例
- unity3d调用手机或电脑摄像头
- Unity3d发布IOS9应用时出现中文乱码的解决方法
- 分享一个开源的网络游戏服务器架构—HouHai
- Unity3D插件详细评测及教学下载
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- Unity3D上路_03-塔防游戏
- Unity3D上路_04-基础资源介绍
- Unity3D上路_05-网络相关
- Unity3d TransformPoint 函数研究
- Unity3d 动态加载fbx模型文件