【教程】dnSpy 反编译与修改 Unity 游戏

Post Cover

dnSpy 是一个调试器和 .NET 程序集编辑器。即使没有源代码,也可以使用它进行反编译然后再修改调试。
理论上,使用 Unity 引擎制作的游戏都可以用 dnSpy 来进行修改。

在玩某些游戏的时候,你可能会有修改游戏设计或数据的需求,比如增加提示、制作 MOD、想开挂……😄

下面以反编译「Party Hard 2」这款游戏并修改为持续速度、无限体力为例,介绍一下我用 dnSpy 修改 Unity 游戏的步骤。


首先在 dnSpy 的 GitHub 项目 Releases 页面中下载最新版的 dnSpy,在本地解压缩后打开dnSpy.exe

接着在 dnSpy 中打开你要修改的游戏的Assembly-CSharp.dll文件(建议提前备份此文件)。

💡 Assembly-CSharp.dll 的位置

Unity 游戏的Assembly-CSharp.dll文件一般存放于游戏安装目录中的xxx_Data\Managed路径下。

我将「Party Hard 2」安装在了 G 盘的 Steam 库之中,则完整路径为 G:\SteamLibrary\steamapps\common\Party Hard 2\PartyHard2Game_Data\Managed。

打开文件后,dnSpy 左侧的程序集资源管理器中多了一项Assembly-CSharp,游戏程序已被反编译出来。

根据下图指示展开目录树并打开{} -这一项。

要修改的游戏内容一般位于这个目录
要修改的游戏内容一般位于这个目录

这次修改的目标是让角色在跑步时不减速,因此可以根据跑步、移动、速度等关键词去寻找相关的代码。

(开发者一般会规范代码命名,因此直接查找目录树或者使用搜索功能通常是可以找到目标代码的。)

我在PlayerCharacterMovement类中先找到了IsRunning()方法,因为它看起来与要修改的目标高度相关。

寻找可能与目标相关的代码
寻找可能与目标相关的代码

打开方法查看后发现,这个方法仅用于判断角色是否正在跑步。此时需要进一步追溯这个判断在哪里被使用过,对着isRunning变量点击右键,选择分析。

分析功能
分析功能

在下方出现的分析窗口中,展开 [读取于] 一项,发现GetSpeed()方法,双击打开。

分析窗口
分析窗口

阅读代码可知,此方法会根据是否正在跑步、是否需要恢复体力、是否减速等条件来计算具体行动速度。

原本的GetSpeed()
原本的GetSpeed()

看来这就是我要找的内容了。对着该方法名点击右键,选择编辑方法 (C#)。

编辑方法
编辑方法

在弹出的编辑窗口中,根据自己的需求改写代码。在这里,我将那些会导致减速的条件与计算步骤都删除了,默认跑步状态就一直是跑步的速度,而其余情况则一直是普通速度。

修改完成后,点击窗口右下角的编译按钮。

修改后的GetSpeed()
修改后的GetSpeed()

在 dnSpy 中选择 [全部保存],注意保存的文件路径与命名要与原本的Assembly-CSharp.dll保持一致,其它选项用默认的即可。

接下来打开游戏测试一下,但我发现效果并不如意😭跑步时随着体力下降到 0,角色依然会减速到步行状态,这与需求不符,所以需要关闭游戏,再次进行修改。

再次使用分析功能,查找计算体力值相关的代码,最后在CommonUpdate()方法中发现,体力值随着时间一直减少,当减少到 0 时,状态变成需要恢复体力,跑步状态会被中断。

原本的CommonUpdate()
原本的CommonUpdate()

用上述的编辑功能进行修改,将减少体力的那行代码删除或注释掉,编译后可以看到 dnSpy 自动将其余代码进行了优化合并。

修改后的CommonUpdate()
修改后的CommonUpdate()

检查确认没有其它代码会导致减速、减体力后(如果要使用高科这个角色,还需要修改 Predator 相关的方法),重新保存,然后打开游戏进行测试。

这一次,角色终于可以一直快速跑步了~目标达成✅

Icon喜欢这篇作品的话,奖励一下我吧~
💗感谢你的喜欢与支持!
QRCode微信
QRCode支付宝
本作品由 小橘猫 于 2025-09-26 16:33:44 发布
作品地址:【教程】dnSpy 反编译与修改 Unity 游戏
除特别声明外,本站作品均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 嗷呜星球
Logo