费耶罗 发表于 2026-8-28 22:23

自制开源Mod FMMatchLens —— 实时比赛数据分析与回放

大家好,最近自己折腾了一个 FM26 的比赛数据分析工具,叫 FMMatchLens,目前基本做到了一个可以正常使用的状态,所以拿出来分享一下。



FM2010 是我的入坑之作。过去十五年虽然不是每一代都玩过,但 FM 一直是我很喜欢的游戏系列。最近买了 FM26,总体来说还是那个熟悉的味道,不过比较遗憾的是,这一代砍掉了一些以前很好用的功能。另一方面,我玩 FM 的时候一直喜欢把自己代入成场边的主教练,研究阵型、球员站位和比赛走势,然后根据场上的变化调整战术。

所以我就想:能不能直接把比赛过程中更详细的数据拿出来,自己做一个分析面板?于是就有了 FMMatchLens。
它本质上是一个 FM26 的 BepInEx 插件 + 独立 Web 数据面板。插件在比赛过程中实时读取数据,然后通过本地接口发送给浏览器里的 Dashboard。所有东西都在自己电脑上运行,不需要上传比赛数据,也不需要联网使用。

目前已经实现的主要功能:

[*]实时比赛数据:进入比赛后自动识别并开始采集,Dashboard 会实时更新
[*]Momentum 比赛动量:可以看到比游戏里更细的比赛走势变化
[*]xG 走势:按比赛时间展示双方预期进球变化
[*]Tactical 战术面板:把射门、传球、防守、控球、纪律等事件直接画在球场上,可以看事件发生的位置和相关球员
[*]球员热图:根据比赛中球员实际位置生成 Heatmap,可以切换全场 / 半场 / 15 分钟区间
[*]阵型与站位:查看双方阵型和球员位置
[*]完整球员信息:首发、替补、位置、角色职责、关键属性、比赛评分等
[*]头像和队徽:支持读取本地 graphics 里的头像包和队徽包
[*]比赛时间轴:可以拖动时间范围,查看某一阶段的比赛数据
[*]比赛存档 / 离线回放:比赛数据会保存成 .fmlens 文件,以后即使不开 FM,也可以直接用 Dashboard 打开重新查看








目前还只是第一版,能挖的数据其实远不止这些,后面也准备继续增加一些通过比赛逐帧数据计算出来的高级统计。
安装说明
目前支持:Football Manager 2026 26.3 + Windows 10/11 x64
首先需要安装 BepInEx 6 IL2CPP x64。如果以前没有用过 BepInEx,可以按照项目 README 里的说明安装。
之后在 Release 里下载两个压缩包:

① FMMatchLens Plugin

[*]把:FMMatchLens-plugin-v<版本号>.zip
[*]直接解压到 Football Manager 2026 游戏根目录。
[*]正常安装以后应该能看到:
[*]Football Manager 2026/BepInEx/plugins/FMMatchLens/FMMatchLens.Plugin.dll
[*]之后正常启动 FM 即可,BepInEx 会自动加载插件。


② FMMatchLens Dashboard
再下载:FMMatchLens-dash
[*]board-v<版本号>.zip 这个不需要放到游戏目录,随便找个文件夹解压即可。
[*]直接双击里面的 index.html,用 Chrome / Edge / Firefox 打开。
[*]进入 FM 比赛以后,Dashboard 会自动连接本机插件并开始显示实时数据,不需要手动导入。
[*]如果只是想回看之前保存的比赛,
也可以直接把 .fmlens 文件拖进 Dashboard,这种情况下甚至不需要启动 FM。

更详细的 BepInEx 安装、插件配置、升级以及常见问题,我都写在 GitHub README 里了。项目目前要求 FM26 26.3、Windows x64 和 BepInEx 6 IL2CPP x64。

下载 / 源码
项目已经开源:
GitHub:
https://github.com/osnsyc/FMMatchLens

直接去 Releases 下载对应版本的 Plugin 和 Dashboard 就可以,目前还是比较早期的版本,肯定还有不少没考虑到的地方。如果大家实际用的时候遇到 Bug,或者有什么想看的比赛数据、统计方式、战术分析功能,都欢迎反馈。

sheap 发表于 2026-8-28 22:34

说明这些底盒数据有,但是SI不知道如何调用并接入到现在的新UNITY前端引擎中{:16_798:}

c1012696305 发表于 2026-8-28 23:09

搞个针对电脑战术调整自己战术的功能就好不知道不能吧实现

费耶罗 发表于 2026-8-29 09:40

c1012696305 发表于 2026-8-28 23:09
搞个针对电脑战术调整自己战术的功能就好不知道不能吧实现

目前对于游戏内存是只读,暂时不会加 写 的操作。不过可以尝试读一下ai的具体战术设置,最终还是交给玩家来决策

sjjklt 发表于 2026-8-30 18:23

牛逼6666666

sjjklt 发表于 2026-8-30 18:39

{"Timestamp":"2026-08-30T18:37:29.8888143+08:00","LogLevel":"Critical","Category":"Default","Message":"Failed to remap branch Person, from: player to: Person"}
{"Timestamp":"2026-08-30T18:37:35.5282987+08:00","LogLevel":"Critical","Category":"Default","Message":"Failed to remap branch Person, from: player to: Person"}

sjjklt 发表于 2026-8-30 18:58

读取出来了

fzjjjjw 发表于 2026-8-31 15:37

可以可以

jasmine_n 发表于 2026-9-4 14:50

XGP版的好像用不了,一直显示等待比赛

白衣飘飘的九号 发表于 2026-9-10 15:07

哇,兄弟有点厉害

补时阶段 发表于 2026-9-14 12:58

兄弟太牛了,感觉si不给你开工资真是便宜他们了。

l121 发表于 2026-9-17 15:17

{"Timestamp":"2026-09-17T15:02:39.7316067+08:00","LogLevel":"Critical","Category":"Default","Message":"Failed to find dependent node \u0027comp\u0027 from \u0027SI.Bindable.Bindings\u002BPathString\u0027"}这个是什么问题,读取不了比赛数据

费耶罗 发表于 2026-9-17 20:35

l121 发表于 2026-9-17 15:17
{"Timestamp":"2026-09-17T15:02:39.7316067+08:00","LogLevel":"Critical","Categor ...

这个unity的日志似乎不是插件造成的。可以将bepinex文件夹里的日志文件发来看看,才能定位是什么问题

yelynn 发表于 2026-9-18 11:02

大佬,这个能不能分析出场面上对方的踢法和各种策略,例如无球阶段它们是否紧逼,是否凶狠抢断,还有持球阶段是否短传还是直传,是否走边还是走中这些呀,后面要是有AI推荐调整就更厉害了{:16_800:}

费耶罗 发表于 2026-9-18 13:50

yelynn 发表于 2026-9-18 11:02
大佬,这个能不能分析出场面上对方的踢法和各种策略,例如无球阶段它们是否紧逼,是否凶狠抢断,还有持球阶 ...

理论上是可以的,因为已经抓取到了引擎内每一个时钟的数据,包括每一个球员的位置、状态,也抓取到了关键事件(射门,传球,盘带,对抗等等)。现在已经有攻击重心了,就是通过比赛势头的原始数据分步计算而来的,同理,任意时间区间的球员热图也是通过所有时钟球员的位置计算而来的。

接下来就是看怎么定义“紧逼”、“直传”了,就是加工数据,当然si引擎也会有自己的指标,可能会更直接的表示引擎状态。

我会尝试计算一些高阶数据,是fm里以前都没有过的,比如VAEP,xT,xGChain等等。

费耶罗 发表于 2026-9-18 13:55

yelynn 发表于 2026-9-18 11:02
大佬,这个能不能分析出场面上对方的踢法和各种策略,例如无球阶段它们是否紧逼,是否凶狠抢断,还有持球阶 ...

目前的阵型时间线组件也是fm从来没提供的,可以动态看对方的调整。至于接入AI,会在后期考虑,但游戏乐趣不是自己操作,见招拆招吗hhh。后面再研究下临场比赛策略的读写,如果可行的话,AI接入到对方球队上可能会更有趣。

现在有了线上demo,可以去看看∶https://fmml.osnsyc.top

yelynn 发表于 2026-9-18 15:38

费耶罗 发表于 2026-9-18 13:55
目前的阵型时间线组件也是fm从来没提供的,可以动态看对方的调整。至于接入AI,会在后期考虑,但游戏乐趣 ...

{:16_788:} 新手小白表示临场调整有点难,所以想说跟ai学习学习临场调整,不然现在每次调整完被进多两个{:16_770:}

费耶罗 发表于 2026-9-19 11:10

jasmine_n 发表于 2026-9-4 14:50
XGP版的好像用不了,一直显示等待比赛

0.4.0版本已支持xgp

l121 发表于 2026-9-20 02:05

费耶罗 发表于 2026-9-17 20:35
这个unity的日志似乎不是插件造成的。可以将bepinex文件夹里的日志文件发来看看,才能定位是什么问题

Setting breakpad minidump AppID = 3551340
SteamInternal_SetMinidumpSteamID:Caching Steam ID:76561199038096803
SteamInternal_SetMinidumpSteamID:Caching Steam ID:76561199038096803
有一个错误日志文件显示这个

l121 发表于 2026-9-20 02:43

费耶罗 发表于 2026-9-17 20:35
这个unity的日志似乎不是插件造成的。可以将bepinex文件夹里的日志文件发来看看,才能定位是什么问题

BepInEx 6.0.0-be.788 - fm (2025/10/26 19:05:37)
Built from commit 5b766a3b7f6c164d4798924a93f3acf4db769d06
System platform: Windows 10 64-bit
Process bitness: 64-bit (x64)
Running under Unity 6000.0.52f1
Runtime version: 6.0.7
Runtime information: .NET 6.0.7
0 patcher plugins loaded
0 assemblies discovered
Executing 0 patch(es)
Chainloader initialized
Class::Init signatures have been exhausted, using a substitute!
Registered mono type Il2CppInterop.Runtime.DelegateSupport+Il2CppToMonoDelegateReference in il2cpp domain
1 plugin to load
Loading
FMMatchLens 0.3.0 loaded for Football Manager 26.x (log mode: release).
Archive writer compression: Deflate, chunk ticks: 2400.
Graphics index build started for 'D:\Sports Interactive\Football Manager 26\graphics'.
Graphics index cache checked in 1,296 ms.
Graphics config discovery restored: 12 configs in 0 ms.
Graphics configs indexed: 330,181 assets (12 cached, 0 parsed) in 87 ms.
Graphics index ready: 330,181 assets from 12 configs (12 cached, 0 parsed, discovery cached) in 1,390 ms (cache load 1,296 ms, discovery 0 ms, indexing 87 ms, cache write skipped).
Local API listening on http://127.0.0.1:16726/.
Unable to install GAME_MATCH match-update hook: game_plugin.dll is not loaded.
GAME_MATCH tick hook will retry until game_plugin.dll is loaded.
Chainloader startup complete
页: [1] 2
查看完整版本: 自制开源Mod FMMatchLens —— 实时比赛数据分析与回放