代码解析
约 586 字大约 2 分钟
2026-01-12
免责声明:本教程仅用于学习丝之歌游戏的代码,请勿用于商业用途
本文将主要介绍如何解析游戏的代码
需要用到的工具
dnspy
这是一个调试器和.NET汇编编辑器,即使没有源代码,也可以用它来编辑和调试.NET和Unity汇编
如何下载:访问dnspy的GitHub仓库,下载对应系统的release版本(已经归档很久了,但是仍然可以使用)
解析游戏代码
解析步骤
解压下载的
dnspy压缩包,启动dnspy.exe程序使用Steam浏览本地文件的功能,打开游戏安装目录
Steam\steamapps\common\Hollow Knight Silksong,并进入\Hollow Knight Silksong_Data\Managed文件夹,找到Assembly-CSharp.dll文件在
dnspy中打开Assembly-CSharp.dll文件

可以点击
{}-查看主要的内容,此时已经可以随意浏览代码了
快捷键
Ctrl+Shift+K,打开搜索框,如搜索playerdata,可以找到PlayerData类,这个类存储了玩家存档数据的字段,也包含了很多对应的方法
快捷键
Ctrl+Shift+R,对变量或方法进行分析,可以获取其上游调用者和下游被调用者的信息,如获取PlayerData类中maxHealthBase字段的上下游
具体示例
我们借助上面的示例,分析一下maxHealthBase字段
/* 获取最大生命值字段 */
[DefaultValue(5)]
public int maxHealthBase;可以看到其下有个调用方法PlayerData.CountGameCompletion(),这个方法会用于统计玩家存档的完成度
我们可以双击方法直接跳转至具体调用位置,查看是如何根据maxHealthBase字段来计算完成度的
this.completionPercentage += (float)(this.maxHealthBase - 5);可以看到,这个字段的计算方式是this.maxHealthBase - 5,从而获取面具收集数量,用以更新游戏完成度
每一个完整收集的面具会增加一个血量上限,也就是maxHealthBase字段的值会增加 1
仿照这个方式,我们可以继续寻找其他字段的具体分析,也可以根据PlayerData.CountGameCompletion()方法来分析其他字段的完成度是如何统计的
