美文网首页
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