首页 > 代码库 > Unity3d 游戏汉化之IL注入文本替换--木石世纪

Unity3d 游戏汉化之IL注入文本替换--木石世纪

最近下了个游戏叫木石世纪(Timber and Stone),沙盒游戏类,看着还不错.

搜了下游戏资料,有人求汉化但是由于是小众游戏,没人出汉化.看了眼是Unity3d的,既然是.Net的,只要资源不是在资源包里,应该都还是蛮简单的.

刚开始做了个字符串替换,发现有些地方还是比较麻烦,还不如拿UnityEngine里面的GUI函数开刀,也就是有了这么一次简单的哦汉化过程.

首先写个简单的类用于注入

    public class TxtInjection
    {
        public static string DoInjection(string txt)
        {
            return txt + "X";
        }
    }

 注入成功后,所有的被注入的字符串后面都应该出现一个X;

然后写个小的示例,用于IL参考:

        public static void Label(object position, string text, object style)
        {
            text = DoInjection(text);
            LabelA(position, text, style);
        }

        public static void LabelA(object position, string text, object style)
        {

        }

text = DoInjection(text); 

就是我们修改字符串的地方了.

反编译看下IL

	0	nop	
	1	ldarg.1	
	2	call	System.String UintyEngineGUIPatch.TxtInjection::DoInjection(System.String)
	7	starg.s	-> (1) text (System.String)
4行,然后查找Unity3d的GUI绘制函数,找了2个..

GUI.Box,GUI.Lable 用Reflector的IL注入插件直接手动写入IL.

运行看效果...


(目前中文部分直接调用的百度在线翻译,勿拍砖...)

后面就简单了,输出所有文本到一个txt,然后使用
英文|中文
这样的格式,自动或手动翻译...
晚点程序丢上来...

Unity3d 游戏汉化之IL注入文本替换--木石世纪