Unity3D轻松搞定多语言版本

记得最早做页游时,要做多语言版本是需要提前规划的。资源要做分离,游戏内语言包也要提取出来。每在游戏内添加一段文本,就要添加一段不那么直观的代码,然后再去语言包添加一行代码。。。反正就是没那么舒服好用就是了。

那么到了U3D里,我给大家推荐一种快速提取语言包,并且批量修改代码的方法。看了我的做法,即便是游戏临近上线,相信你也能分分钟,轻松搞定多语言版本。

如何实现,下面我说下实现思路:

1.定位代码里的中文文本。

2.替换文本为函数,修改代码里的文本为函数+参数的形式,并保存新代码。

3.保存提取出来的文本,输出成语言包。

1.定位代码里的中文文本

用正则判断代码是否存在双引号包含的内容

Regex reg = new Regex("\".*?\"");

如果有双引号结构的文本则进一步判断是否包含中文字符。

public static bool HasChinese(string str) { return Regex.IsMatch(str, @"[\u4e00-\u9fa5]"); }

如果都符合,则把要里面的文本存到列表里,再对原来的代码进行修改。

2.替换文本为函数,修改代码里的文本为函数+参数的形式,并保存新代码。

TextAsset textAsset = AssetDatabase.LoadAssetAtPath(assetPath, typeof(Object)) as TextAsset;

 string text = textAsset.text;

StreamWriter fs = files.CreateText();

text = text.Replace("\"" + format + "\"", "StrUtil.GetText(\"" + format + "\")");

fs.Write(text);

3.保存提取出来的文本,输出成语言包。 

if (!Localization.Contains(format) && !string.IsNullOrEmpty(format)) { if (HasChinese(format)) { text = text.Replace("\"" + format + "\"", "StrUtil.GetText(\"" + format + "\")"); Localization.Add(format); staticWriteText += format + " = " + format + "\n"; } }

把提取的中文生成出来

string textPath = OutPath;

if (System.IO.File.Exists(textPath)) { File.Delete(textPath); }

using (StreamWriter writer = new StreamWriter(textPath, false, Encoding.UTF8)) { writer.Write(staticWriteText); }

Debug.Log(OutPath);

AssetDatabase.Refresh();

这样一来就大功告成了,附上源码,希望能帮到各位 

链接: https://pan.baidu.com/s/1XMMBygpRSdRpu28bBGWUpg 提取码: nhuh 

该篇文章是在 雨松MOMOUnity3D研究院之多语言用中文做KEY这篇基础上加工完成的,修改了一些细节并添加了,批量修改原代码的功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容