1. Dnspy介绍
dnSpy是一个调试器和.NET程序集编辑器。即使没有源代码,也可以使用它进行反编译然后再修改调试。
理论上,使用Unity引擎制作的游戏都可以用dnSpy来进行修改。
想了解或者下载的话 可以前往该软件的Github仓库查看:dnspy A .NET debugger and assembly editor
在玩某些游戏的时候,你可能会有修改游戏设计或数据的需求,比如增加功能、制作MOD、关卡设计太难难以通关之类的
下面以反编译一款横版ACT小游戏,介绍一下我用dnSpy修改Unity游戏的步骤。
注意哈 仅限单机 联网游戏是没办法依靠这个手段修改的,仅限本地离线单机游戏。
2. 开始准备
2.1 下载并打开目标 DLL
首先在dnSpy的GitHub 项目 Releases页面中下载最新版的 dnSpy,在本地解压缩后打开 dnSpy.exe。
接着在dnSpy中打开你要修改的游戏的 Assembly-CSharp.dll 文件**(建议提前备份此文件)**。
Unity游戏的 Assembly-CSharp.dll 文件一般存放于游戏安装目录中的 xxx_Data\Managed 路径下。
打开文件后,dnSpy左侧的程序集资源管理器中多了一项 Assembly-CSharp,游戏程序已被反编译出来。
根据下图指示展开目录树并打开-这一项。
2.2 定位关键代码
这次修改的目标是让角色获取无限弹药,因此可以根据弹药、武器、换弹等关键词去寻找相关的代码。
(开发者一般会规范代码命名,因此直接查找目录树或者使用搜索功能通常是可以找到目标代码的。)
我在 Weapon 类中先找到了 TryFire() 方法,因为它看起来与要修改的目标高度相关。
让我们简单的浏览一下代码,或者你也可以让AI帮助你分析这个方法的具体功能。
阅读代码后我们可以锁定这行代码:
float value = currentAmmo.value;
currentAmmo.value = value - 1f;
大概意思是当前的 currentAmmo.value 数值 = currentAmmo.value - 1f;
是不是一下子就看懂了 这相当于枪械开火后子弹数值根据目前子弹数值去减去一个1。
所以我们是不是就能想到怎么去修改了对吧
比如currentAmmo.value=currentAmmo.value ;相当于子弹不减
currentAmmo.value=currentAmmo.value +1f;就相当于子弹越打越多 如果怕太多我们也可以添加一个limit对吧
2.3 编辑代码
我们右键选择 编辑方法(C#)... 去编辑它的C语言代码。
修改为想要的代码后我们点击右下角的编译来完成我们的编辑。
2.4 备选方案:编辑 IL 指令
如果你发现出现了许多的迷之报错,别急 并不是没办法了,这里我们学一下编辑IL指令这个办法
当然了你修改的没问题就不需要尝试这个方法。
同样在那个右键菜单之中,我们去点击它。
具体细节看图片,我们能发现一个 1 就孤零零的在哪,然后我们的代码也是 currentAmmo.value = value + 1f;
是不是能很快的定位到? 我们把原先的 sub 点一下 然后会出现一个列表 我们重新选中 add 然后点击确认
确认完成后原代码就从 currentAmmo.value = value - 1f; 变成了 currentAmmo.value = value + 1f;
这样我们就实现了一个子弹越打越多的效果
2.5 保存模块
最后我们点击左上角 去保存这个模块,如果你担心自己修改错误导致游戏崩溃 启动不了,别忘了备份一下 Assembly-CSharp.dll
我们保存完成后回到游戏就可以发现,不论怎么射击 子弹都是越打越多的,这就是一个简单的Unity游戏反编译修改教程。
仅参考~ 且只适用于非il2cpp 非Mono 的Unity游戏。
注意哈,如果你游戏文件夹目录下完全找不到
Assembly-CSharp.dll那就说明你的游戏可能是 il2cpp 或者 Mono 加密的。
好了到此为止,这只是我的修改思路。







