美文网首页
Unity3D轻松搞定多语言版本

Unity3D轻松搞定多语言版本

作者: _ArayA_ | 来源:发表于2019-08-05 20:03 被阅读0次

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

那么到了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这篇基础上加工完成的,修改了一些细节并添加了,批量修改原代码的功能。

相关文章

网友评论

      本文标题:Unity3D轻松搞定多语言版本

      本文链接:https://www.haomeiwen.com/subject/fdqvdctx.html