MaaAssistantArknights 深度解析:三个核心模块如何驱动明日方舟日常自动化

📅 2026/8/22 14:54:05
MaaAssistantArknights 深度解析:三个核心模块如何驱动明日方舟日常自动化
MaaAssistantArknights 深度解析三个核心模块如何驱动明日方舟日常自动化【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights每天早上打开明日方舟跑两把材料本、换一次基建班、刷完公招、访问好友领完信用最后关服——这套动作每天重复一次每次耗时二三十分钟。MaaAssistantArknights下称 MAA把这一切收进一个按钮它定时截取游戏窗口画面用图像识别定位按钮和文字再模拟点击与滑动。整个过程不注入游戏进程、不改内存相当于在屏幕外装了一双眼睛和一双手这也是日常自动化里最稳的一条技术路线。仓库的核心是 src/MaaCore/ 下一个 C20 编写的库 MaaCore外围包着 WPF GUI、命令行工具和 C / Python / Rust / Golang 等语言绑定。以下按代码实际结构来讲。五层架构从窗口截图到点击MAA 的分层自上而下可以拆成五块入口层MaaWpfGuiWPF 桌面应用Windows、MaaMacGuimacOS、maa-cli跨平台命令行另有 Rust 与 Golang 编写的 HTTP 服务绑定层src/Python/、src/Rust/、src/Golang/、src/Java/、src/Dart/各语言封装同一套 C 接口核心层 MaaCore内部分 Vision识别、Task调度、Controller控制、Config资源加载四个模块资源层resource/tasks/ 下的任务配置 JSON、resource/template/ 模板图库、resource/onnx/ 推理模型设备层Windows 桌面进程、安卓模拟器、安卓真机一次任务执行是个闭环Controller 截屏 → Task 调用识别模块的 analyze() 判断当前画面 → 决定下一步动作 → Controller 发出 tap / drag → 再截屏、再循环直到状态机走到终态。点哪里、等什么全部写在任务配置 JSON 里代码只是执行引擎。MAA 主界面任务调度、参数配置与实时日志系统一句话小结GUI 与绑定只是可替换的壳MaaCore 是唯一引擎资源层才是游戏知识的存放地。核心引擎拆解值得精读的三块识别层 Vision四类识别器按需插拔它回答屏幕上现在有什么。src/MaaCore/Vision/ 下是 VisionHelper 基类的多个继承者各管一类识别Matcher基于 OpenCV 的模板匹配在截图里找已知图片快但对像素变化敏感OCRer文字识别识别后由 postproc_replace_ 做字符替换与过滤纠正 OCR 的误识别RegionOCRer先圈定文本区域再识别精度更高FeatureMatcher特征点匹配应对模板图本身会变化的场景每个任务在配置里自由组合按钮位置稳定就用 Matcher要读出理智数字就得用 OCR。这种组合方式用配置换取了速度与精度的平衡慢但准的 OCR 只在必要时才启用。战斗开始界面识别工具从截图中定位界面元素并判断状态调度层 Task状态机加上 C20 concepts它回答下一步点什么。src/MaaCore/Task/AbstractTask.h 定义了任务生命周期run() 是入口内部循环 analyze() 判断、_sleep() 等画面稳定并支持重试次数与忽略错误开关。两个细节值得看插件注册用 C20 concepts 约束类型register_plugin() 上写着 requires std::derived_fromPluginType, AbstractTaskPlugin传错类型直接编译失败类型安全交给了编译器行为由配置驱动任务链定义在 resource/tasks/tasks.json每步用哪个识别器、点哪个坐标、失败重试几次全在 JSON 里。游戏界面改版时常见修法是更新资源文件而不是改核心代码控制层 Controller同一套 API 背后的多平台适配它回答手指怎么动。src/MaaCore/Controller/ 下每种平台一套实现AdbController走 ADB 协议安卓模拟器与真机的通用方案Win32Controller直接挂接桌面游戏窗口MinitouchController经由 minitouch 内核驱动触控坐标比 ADB 更精确MumuController / PlayToolsController走模拟器厂商私有端口比通用 ADB 路线更快MaaFwAndroidNativeController基于新 MaaFramework 直连安卓目标不依赖电脑端的 ADB 服务构建层按目标挑实现比如 macOS 上开启 WITH_MAC_SCK 选项后编译 ScreenCaptureKit 截屏代码。上层调用的始终是同一批 tap / drag 接口不关心点击具体从哪条通道发出。一句话小结Vision 管看清、Task 管想清、Controller 管动清三者各自独立可分开测试。跑起来依赖、构建与启动环境依赖见顶层 CMakeLists.txt 与 src/MaaCore/CMakeLists.txtCMake ≥ 3.28C20 编译器MSVC、Clang 或 Apple ClangOpenCV、ONNX Runtime识别模型推理、zlib、BoostmacOS 需 Xcode 工具链构建步骤git clone https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights cmake -B build -G Visual Studio 17 2022 -DBUILD_WPF_GUION -DINSTALL_PYTHONON cmake --build build --config Release关键选项与文件-DBUILD_WPF_GUIONWindows 下编译 WPF 桌面应用WIN32 平台默认开启-DINSTALL_PYTHONON一并安装 Python FFICMakePresets.json各平台推荐预设不用手工拼参数resource/version.json资源版本号发布包按此自动拉取对应资源启动方式Windows 直接运行编译出的 MAA.exe无图形界面的 Linux / macOS 服务器用 maa-cli。resource/ 目录随仓库提供核心启动时先读 config.json 与 tasks.json 装载任务链识别时再按配置加载对应模板与模型。一句话小结依赖清单不长真正耗时的是 OpenCV 与 ONNX Runtime 的构建其余都是 CMake 选项的事。路线对比为什么是图像识别游戏自动化主流有四条路线横向对比如下路线原理侵入性被检测风险速度部署成本内存读取 / DLL 注入直接读游戏内存取状态改游戏进程高最快低但版本更新后要重新研究偏移键鼠宏脚本只发输入读不到画面进程外低快但无反馈闭环最低图像识别MAA截屏 模板 / OCR模拟点击进程外不碰内存低中等逐帧分析中需维护模板与模型云端模拟 远程 API游戏跑在云端本地下指令服务端内视环境受网络延迟限制高需服务器运维宏脚本读不到屏幕游戏一旦卡住只会继续盲点内存注入最快也最容易被标记。图像识别路线慢一点换来的是闭环先看清再动手画面没变化就等待或重试鲁棒性来自这个结构。MAA 还把部署成本压到最低——全部资源是本地 JSON 与图片文件不需要训练、不需要服务器。一句话小结对个人日常场景图像识别是风险、性能与维护成本三者折中后最稳的选择。扩展与集成接入自己工程的三种方式方式一C 接口最底层。完整导出函数在 include/AsstCaller.h覆盖创建任务、连接设备、下发指令任何有 FFI 能力的语言都能从这里接。方式二官方语言绑定Pythonsrc/Python/asst/asst.pyRustsrc/Rust/附带 HTTP 服务实现Golangsrc/Golang/附带 HTTP 服务适合后端集成Java / Dartsrc/Java/、src/Dart/方式三HTTP API。跑起 Golang 或 Rust 的 HTTP 服务用 REST 下发任务适合服务端或 Web 集成。想新增一个游戏操作先试配置驱动在 resource/tasks/ 下加任务配置把识别器、坐标、重试次数写进 JSON不动代码。确需要自定义识别算法或新的状态机分支时继承 AbstractTaskPlugin 再用 register_plugin() 注册concepts 约束会保证类型合法。自定义基建排班等对外协议说明在 docs/zh-cn/protocol/ 目录开发流程指南见 docs/zh-cn/develop/development.md。一句话小结能用 JSON 描述的行为就不写代码必须写代码时入口只有 AbstractTaskPlugin 一个。收尾这个仓库适合谁读它适合两类人一要用明日方舟自动化工具、还想改它行为的人二想看一个 C 里配置驱动 插件化真实案例的开发者。可以带走三点状态机 插件模式长任务如何做到多步可恢复、可扩展看 AbstractTask 与 Task/ 各子目录即可C20 concepts 的实际用法register_plugin 的例子比教科书更直观资源与代码分离游戏界面变了更新 resource/ 下的 JSON 与模板图核心不用重新编译凡规则变化快于代码的业务都能借鉴这套做法代码量不小建议从三个文件入手AbstractTask.h、Vision/ 里的 VisionHelper 基类、任意一个 Controller 的实现。【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考