CrazyNut 发表于 2019-4-3 23:29

某游戏引擎成品修改内置字符串方法笔记

本帖最后由 zjh16529 于 2019-6-6 18:30 编辑

最近遇到一个问题某游戏引擎的游戏都知道代码可以在Assembly-CSharp.dll里面修改

可是当数据直接在引擎里面赋值的时候,怎么找到字符串并修改呢?点这里可以看我的提问

我想到的方法还是从Assembly-CSharp.dll里面修改
如果大佬有更好的方法麻烦教教我


https://static.52pojie.cn/static/image/hrline/4.gif


下面演示下过程   先自己搞一个Demo出来


有7个文本框,每个文本框内容不同【模拟一下正常软件】,我要修改我想修改的文本框的内容和字体大小



然后随便来一个空代码随便绑定在一个物体上【模拟一下正常软件,因为修改也至少要有一个脚本才行】


https://static.52pojie.cn/static/image/hrline/4.gif
方法1:

感谢@艾莉希雅 大佬



Data目录下会有一个level0的文件    后面的0代表场景顺序   
我的Demo场景只有一个场景自然只有一个0    游戏一般会有多个场景   0.1.2.3..... 至于要改的是哪一个,,应该只有自己挨个打开看了

然后用Notepad++打开转成UTF-8编码



直接就能看到自己的字符串了。。。直接修改就行

注意保持文本长度一致,不然改了后打不开!
https://static.52pojie.cn/static/image/hrline/4.gif


方法2:

OK 然后打包出来 Dnspy 反编译Assembly-CSharp.dll【PC和安卓都一样为了方便我就打包PC了】



可以正常的看到之前的代码。。
但是编辑的时候遇到个问题。。因为文字框是UI必须Using UnityEngine.UI.dll。。然后我发了一个问题

Dnspy怎么添加引用?, 在大佬的解答下   导出工程然后用vs打开添加引用就OK了



接下来开始用代码找到我们的文字框并修改
【直接贴代码了】




这里说明一下 在Unity里面 每一个物体都是一个GameObjet不过只是每个物体带的组件不一样功能就不一样



把改好的dll 替换进去 直接启动 OK 了



大佬们有更好的办法务必教教我QAQ 谢谢

另类飞翔 发表于 2019-4-4 08:44

本帖最后由 另类飞翔 于 2019-4-4 08:58 编辑

还有一种方法,当没有挂载脚本的时候,自己仿写一个Assembly_Csharp,在模块里编写你的上面的修改代码,然函数,注入后去挂载脚本就好了
                        GameObject gameObject = new GameObject("Test");
                        gameObject.AddComponent<Test>();

CrazyNut 发表于 2019-4-4 09:20

另类飞翔 发表于 2019-4-4 08:44
还有一种方法,当没有挂载脚本的时候,自己仿写一个Assembly_Csharp,在模块里编写你的上面的修改代码,然 ...

你这个方法绝对有问题   

而且没挂任何脚本的话根本不会运行这一段代码吧

动态加载物体   坐标你怎么算不好放在你想放的地方不说。。text组件不是必须在canvas下才行

kamui 发表于 2019-4-4 00:15

谢谢教程,unity学习中

艾莉希雅 发表于 2019-4-4 00:36





事实上……修改UTF8编码就……

艾莉希雅 发表于 2019-4-4 00:38

哦顺便附上UTF-8编码转换
http://www.mytju.com/classcode/tools/encode_utf8.asp
不是广告……

vvking6 发表于 2019-4-4 06:58

hcoolman33 发表于 2019-4-4 07:48

谢谢LZ分享。

Yanpeen 发表于 2019-4-4 07:57

佩服楼主的毅力和学习能力,同时也谢谢楼主的分享

51PJcpuyong 发表于 2019-4-4 08:10

unity学习

magang 发表于 2019-4-4 08:29

佩服楼主的毅力和学习能力,同时也谢谢楼主的分享。

eflysky 发表于 2019-4-4 08:35

这个厉害,封包过程中会报错吗
页: [1] 2
查看完整版本: 某游戏引擎成品修改内置字符串方法笔记