Unity本地化介绍
概述:
本地化为了应对游戏发布到不同地区不同国家,对界面相关内容进行修改
先创建一个ui界面,待会对这个界面进行本地化操作,如图:
本地化之后
实现思路:
本地化只是对一些文字进行提取,生成一个文本文件,中国版本(chinese.txt),美国版本(American.txt),这两个文本文件中的内容都是对相同ui文字的操作,一个键对应一个值。(一个国家一个文本文件,根据发布的版本修改显示)
首先创建两个文本文件
再说一下实现原理:
①.将要发布的国家的版本对应文字做成文本文件,如上图
②.创建Localizationmanager,做成单例模式。
③.根据提供的路径解析文本文件为TextAsset
④.对解析的文本文件按照‘/’&‘=’拆分,存到字典当中
⑤.在创建一个Localization脚本,挂载在这个案例中的ui控件上面,定义一个公有变量,根据公有变量去字典里面查找替换
(其实这样的方式只适合用来学习本地化,有兴趣的同学可以学会这个之后,去看看NGUI里面的demo,有一个例子就是讲解本地化的,或者待会讲完这个例子我可以带着大家一起去剖析一下哦!)
好了,创建好了两个本地化文本文件,也创建好了我们的示例工程,接下来需要创建我们的LocalizationManager和LocalizationUI脚本了。
LocalizationManager:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class LocalizationManager
{
private string mLanguage;//语言类型
/// <summary>
/// 这里可将修改的语言类型做成属性,提供给外界修改
/// </summary>
public string Language
{
get { return mLanguage; }
set { mLanguage = value; }
}
private Dictionary<string, string> mLanguageDict; //存储语言字典
private string resourceDir = "Localization";//解析的二级目录
private static LocalizationManager mInstance;
public static LocalizationManager GetSingleton()
{
if (mInstance == null)
{
mInstance=new LocalizationManager();
}
return mInstance;
}
private LocalizationManager()
{
mLanguageDict = new Dictionary<string, string>();
SetLanguage("american");
}
/// <summary>
/// 读取文本,存入字典
/// </summary>
/// <param name="varLanguage"></param>
private void SetLanguage(string varLanguage)
{
//1.读取文本
string tempPath = resourceDir + "/" + varLanguage;
TextAsset asset = Resources.Load<TextAsset>(tempPath);
string targetLanguage = asset.ToString();
//2.解析文本存入字典
string[] firstSplit=targetLanguage.Split('\n');
for (int i = 0; i < firstSplit.Length; i++)
{
string[] secondSplit = firstSplit[i].Split('=');
mLanguageDict.Add(secondSplit[0],secondSplit[1]);
}
}
/// <summary>
/// 根据键值设置ui文字
/// </summary>
/// <param name="varKey"></param>
/// <returns></returns>
public string GetTextUI(string varKey)
{
if (string.IsNullOrEmpty(varKey)) { return null;}
string tempText;
if (mLanguageDict.TryGetValue(varKey, out tempText)) { return tempText;}
return null;
}
}
LocalizationUI:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class LocalizationUI : MonoBehaviour
{
public string UIKey;
private Text thisText;
private LocalizationManager lomg;
void Start()
{
lomg=LocalizationManager.GetSingleton();
thisText = GetComponent<Text>();
thisText.text = lomg.GetTextUI(UIKey);
}
}
我们创建了四个Text控件,如图:
将LocalizationUI脚本挂载在Text上面即可,这样运行游戏时候,就可以看到效果了!这种是实现游戏本地化的一种方式之一。最后本例的工程下载地址:
链接:http://pan.baidu.com/s/1c1O5S1y 密码:q640