当前位置: 首页 > article >正文

HarmonyOS 6 ArkGraphics 3D精讲:从旋转立方体看鸿蒙原生3D能力

HarmonyOS 6 ArkGraphics 3D精讲从旋转立方体看鸿蒙原生3D能力前言从数字孪生到鸿蒙 3D大家好我是你们老朋友木斯佳熟悉我的朋友们知道我长期从事物联网、数据可视化相关开发。过去几年里我在各种平台上折腾过 3D 可视化WebGL、Unity、自研引擎……也一直在关注鸿蒙在 3D 方向上的进展。坦白说在HarmonyOS 6.0 之前ArkGraphics 3D 的能力还比较单薄。那个时候开发者主要能做的是轻量化的模型展示真正稍微复杂一点的交互、渲染控制往往要依赖 C API 去实现对于 ArkTS 开发者来说3D 能力的门槛并不低但从HarmonyOS 6.0 开始事情发生了本质变化。ArkGraphics 3D 的生产级体验大大增强场景、节点、相机、材质、动画、后处理在 ArkTS 侧变得可组合、可控制轻 3D 场景不再需要绕过 UI 框架去单独维护渲染链路、资源管理、交互能力逐步形成工程闭环作为长期在图形工程一线折腾的人我对这种变化很敏感也很兴奋。在实操过程中从场景构建到骨骼动画从坐标拾取到后处理这条链路上的坑我基本都踩过一遍。这个专栏的目标就是把我看到的这些变化、以及背后数学与图形在工程上的美学用一篇一篇可落地的文章和你一起拆解。一、3D界的Hello World先搓一个能自转的立方体3D 教程最怕上来就讲一堆名词读完直接劝退。3D界的Hello World是渲染一个立方体。在配套代码中本篇案例的核心链路就是这几步Scene.load($rawfile(gltf/Cube/glTF/Cube.gltf)).then(async(result:Scene){this.sceneresult;this.sceneOpt{scene:this.scene,modelType:ModelType.SURFACE}asSceneOptions;constrfthis.scene.getResourceFactory();this.cameraawaitrf.createCamera({name:Article01Camera});this.camera.enabledtrue;this.camera.position.z4;this.cubethis.scene.getNodeByPath(Constants.CUBE_PATH);constgreenMaterialawaitrf.createMaterial({name:Article01GreenMaterial},MaterialType.METALLIC_ROUGHNESS);greenMaterial.baseColor{image:null,factor:{x:0.12,y:0.74,z:0.25,w:1.0}};(this.cubeasGeometry).mesh.materialOverridegreenMaterial;});让它动起来的部分也很直接consthalfRadiandegree*Math.PI/360;this.cube.rotation{x:0,y:Math.sin(halfRadian),z:0,w:Math.cos(halfRadian)};这段代码的意义很大。它是一个能把场景加载、资源创建、相机、材质、节点旋转、组件绑定串成闭环的原生 3D 能力。通过ArkGraphics 3D 先能实现“模型加载”只要这条链路通了后面的坐标、旋转、场景图、资源、动画、灯光、相机和交互才有继续讲下去的基础。1.1 为什么旋转参数是 x, y, z, w四元数的“够用理解”你可能会好奇为什么旋转不是rotation: { angle: 30, axis: y }而是 x, y, z, w 四个值这是四元数 (Quaternion)图形学里处理旋转的标准方式。直观理解不深究数学普通欧拉角(x, y, z)直观但有问题——万向锁 (Gimbal Lock)当两个旋转轴重叠时会丢失一个旋转自由度四元数用(x, y, z, w)表示旋转没有万向锁且插值更平滑在本例中// 绕 Y 轴旋转 degree 度consthalfRadiandegree*Math.PI/360;cube.rotation{x:0,// 不绕 X 轴y:Math.sin(halfRadian),// 绕 Y 轴的分量z:0,// 不绕 Z 轴w:Math.cos(halfRadian)// 标量部分};后续我们会完整展开四元数与万向锁的介绍这里先记住看到 4 个旋转参数别慌那是为了更稳的旋转。1.2 你可能遇到的第一批坑在跑通这个立方体的过程中你可能会遇到这些问题错误现象原因解决方案画面全黑相机未启用或位置不对检查camera.enabled true相机位置在物体前方模型加载失败glTF 路径错误或格式不兼容确认文件在rawfile目录使用官方示例模型测试材质替换不生效materialOverride赋值时机不对确保在Scene.load的.then回调中执行立方体不旋转rotation每帧未更新使用State或aboutToAppear中启动定时器/帧回调旋转动画卡顿每帧创建新对象复用cube引用不要重复getNodeByPath编译报错找不到kit.ArkGraphics3D的类SDK 版本低于 API 20 、或者是22、23更新时删除了一些旧的接口检查build-profile.json5中的compileSdkVersion这些都是一些3D常见问题如果你遇到类似情况对照排查即可。二、ArkGraphics 3D 是什么ArkGraphics 3D 可以理解成鸿蒙系统里的一套原生 3D 图形能力。它的重点不是“做一个大而全的游戏引擎”而是把 3D 能力嵌进鸿蒙应用运行时里让开发者能在 ArkUI 里直接构建 3D 场景创建相机和光照绑定材质播放动画做射线检测API 202.1 三个最核心的特征特征说明轻量不是 Unity / Unreal 那种重型引擎而是让应用“够用、够快、够原生”原生集成不需要单独起引擎进程Component3D直接作为页面的一部分渲染以渲染为中心关注的是加载场景、管理节点、创建资源、控制相机、控制材质、渲染到屏幕一句话ArkGraphics 3D 适合在鸿蒙应用里需要 3D、但不想引入重型引擎的场景。2.2 它适合什么场景为什么适合轻 3D 展示不需要重型引擎也能让产品快速 3D 化电商商品展示旋转、缩放、点击高亮、换材质都很实用车载 HMI系统级集成和 UI 共存更自然3D 特效卡片可以把 3D 作为界面的一部分而不是整页替换工业 / 设备可视化结构清晰节点和资源关系容易管理2.3 它不适合什么场景适合程度原因大型动作游戏❌ 不适合引擎生态、物理和工具链都不是这个方向复杂刚体仿真❌ 不适合不是以物理引擎为中心超大场景开放世界❌ 不适合不是重型游戏架构需要强编辑器协作的 3D 生产管线⚠️ 视情况需要结合工具链不是纯引擎闭环2.4 如果你熟悉 Unity 或 Three.js这里是对照表概念UnityThree.jsArkGraphics 3D场景根对象SceneSceneScene游戏对象/节点GameObjectObject3DNode相机CameraCameraCamera光源LightLightLight材质MaterialMaterialMaterial组件挂载AddComponentT()add(object)节点查找 属性修改资源加载Resources.Load()/AddressablesGLTFLoaderScene.load()ResourceFactory关键差异ArkGraphics 3D 的Node没有像 Unity 那样的AddComponent模式而是通过getNodeByPath查找后直接操作属性。这更接近场景图遍历的思路而不是组件化组合。三、HarmonyOS 6.0 前后能力跃迁的关键分水岭这是很多开发者容易忽略、但非常重要的一段背景。3.1 HarmonyOS 6.0 之前维度状态ArkTS 侧能力偏轻量展示深度控制有限复杂交互需要绕过框架使用 C API渲染控制不灵活对普通应用开发者门槛偏高3.2 HarmonyOS 6.0 之后维度状态ArkTS 侧能力场景 / 节点 / 材质 / 动画 / 后处理完整暴露生产级体验显著增强可支撑业务落地UI 3D 融合Component3D ArkUI 原生打通学习路径更清晰文档和示例逐步完善本专栏的所有案例都基于HarmonyOS 6.0的能力编写。如果你还在更早的版本上做 3D会明显感受到差异。四、鸿蒙图形栈与渲染链路你可以把鸿蒙 3D 的整体链路记成一句话UI 层ArkUI → 方舟渲染层ArkGraphics 3D → 图形后端Vulkan → 显示4.1 各层职责层级职责ArkUI页面、按钮、布局、文本、交互控件ArkGraphics 3D构建 3D 场景、组织渲染指令Scene / Node / Camera / Light / MaterialVulkan / OpenGL ESGPU 驱动层真正执行渲染显示最终输出到屏幕4.2 CPU 和 GPU 在 3D 里各做什么角色负责内容示例CPU调度员加载资源、创建对象、处理交互、更新节点参数Scene.load()、cube.rotation ...GPU工厂顶点变换、光照计算、纹理采样、深度测试、像素输出渲染管线执行 为什么这件事重要很多 3D 卡顿不是“模型太大”而是每帧重复创建资源不必要的重算过多的透明混合资源释放不及时4.3 逃不开的坐标系世界、局部、相机、屏幕在 3D 世界里一个顶点要经过 4 次坐标变换才能变成屏幕上的像素坐标系说明ArkGraphics 中的体现局部坐标系 (Local)模型自身的原点glTF 文件内定义的顶点位置世界坐标系 (World)场景中的绝对位置node.position相机坐标系 (View)相对于相机的坐标camera.position 朝向裁剪/屏幕坐标系 (Projection/Screen)最终输出的 2D 坐标由相机投影矩阵自动计算为什么这个重要当你要做射线检测点击拾取物体时需要把屏幕坐标 (x, y) 反向变换回世界坐标系的射线。不理解这 4 层变换交互就无从谈起。后续会专门展开矩阵运算这里先建立坐标系的概念框架。截止目前鸿蒙官方并没有坐标系相关的辅助工具类但是有盒模型相关工具类。后续我会带大家一一实现这些实用工具类4.4 一个旋转立方体性能开销有多大实测HarmonyOS 6.0Mate 60 Pro指标数值帧率稳定 60 FPSCPU 占用~3% (单核)GPU 占用~2%内存增量~35 MB含引擎开销这说明 ArkGraphics 3D 的基础渲染开销很低。后续当你加入复杂模型、多光源、阴影、后处理时才是真正考验优化的开始。五、案例一旋转立方体的完整闭环这一节是整篇文章的落地核心。配套代码做了几件很典型的事加载一个 glTF 立方体场景创建相机把 3D 场景挂到Component3D给立方体换一个更直观的绿色材质每帧更新立方体四元数旋转前置知识我们加载的是什么glTF 简介本例加载的是Cube.gltf。glTF 是 3D 模型的“JPEG 时代标准”文件类型说明特点.gltf(JSON)描述场景结构、节点、材质、动画可读纹理单独存放.glb(二进制)上述内容打包成一个文件体积小适合网络传输一个最简单的 glTF 包含meshes顶点位置、法线、UV 坐标nodes层级关系、变换矩阵materials材质参数PBR 工作流scenes根场景引用理解 glTF 结构能帮你更好地理解getNodeByPath的路径从哪来。5.1 完整代码链路解读// ① 加载场景Scene.load($rawfile(gltf/Cube/glTF/Cube.gltf)).then(async(scene:Scene){// ② 获取资源工厂constrfscene.getResourceFactory();// ③ 创建相机constcameraawaitrf.createCamera({name:Article01Camera});camera.enabledtrue;camera.position.z4;// ④ 找到立方体节点constcubescene.getNodeByPath(Constants.CUBE_PATH);// ⑤ 创建绿色材质constgreenMaterialawaitrf.createMaterial({name:Article01GreenMaterial},MaterialType.METALLIC_ROUGHNESS);greenMaterial.baseColor{image:null,factor:{x:0.12,y:0.74,z:0.25,w:1.0}};// ⑥ 替换材质(cubeasGeometry).mesh.materialOverridegreenMaterial;});5.2 逐 API 解读每一行在做什么代码作用注意事项Scene.load($rawfile(...))异步加载 glTF 场景返回 Promise需要await或.thenscene.getResourceFactory()获取资源工厂用于创建相机、材质、光源等rf.createCamera({ name })创建相机需要设置enabled true才会生效camera.position.z 4设置相机位置相机默认看向原点 (0,0,0)scene.getNodeByPath(path)按路径查找节点路径取决于 glTF 内部结构rf.createMaterial(name, type)创建 PBR 材质METALLIC_ROUGHNESS是标准 PBR 工作流material.baseColor.factor设置基础色 RGBA值范围 0~1这里是绿色 (0.12, 0.74, 0.25)mesh.materialOverride material替换材质会覆盖 glTF 中的原始材质5.3 这条链路教会你什么Scene.load → ResourceFactory → Camera → Node → Material → Component3D → Rotation只要能把这条链路看懂才能真正理解能在鸿蒙页面里工作的 3D 场景体系。六、传统 3D 概念的鸿蒙落点速查表每个 ArkGraphics 3D 概念背后都对应一个经典图形学概念。传统 3D 概念传统含义ArkGraphics 3D 中的对应场景图管理物体层级关系ScenegetNodeByPath()相机定义视角和投影createCamera()position材质表面外观属性createMaterial()baseColor四元数平滑旋转rotation.x / y / z / wglTF3D 模型标准格式Scene.load(.gltf)MVP 矩阵模型 → 世界 → 视图 → 投影节点变换 相机参数总结如果你只带走一个结论那就是ArkGraphics 3D 在鸿蒙 6.0 后已经可以对标老牌渲染体系的开发体验了。它最适合做的不是替代 Unity而是在鸿蒙应用中补足 3D 表达和交互能力。本篇的旋转立方体只是一个入口。它证明的不是“我能渲一个方块”而是场景加载 资源创建 相机 材质 节点更新 完整闭环如果你已经跑通了第一个旋转立方体后续我会带大家理解 ArkGraphics 里必须知道的那几个概念坐标系、向量、矩阵、MVP。没有这些后面的相机、光照、交互全都讲不透。

相关文章:

HarmonyOS 6 ArkGraphics 3D精讲:从旋转立方体看鸿蒙原生3D能力

HarmonyOS 6 ArkGraphics 3D精讲:从旋转立方体看鸿蒙原生3D能力 前言:从数字孪生到鸿蒙 3D 大家好,我是你们老朋友木斯佳,熟悉我的朋友们知道,我长期从事物联网、数据可视化相关开发。过去几年里,我在各种平…...

开关电源功率因数校正:从谐波失真到PFC电路设计实践

1. 项目概述:从“相移”到“失真”,理解开关整流器的功率因数挑战在通信、数据中心乃至我们日常使用的各类开关电源适配器中,高频开关整流器是电能转换的核心。作为一名电源工程师,我经常被问到:“为什么我们设备的输入…...

5分钟快速上手:Parsec VDD虚拟显示器完整指南,彻底释放游戏串流潜能

5分钟快速上手:Parsec VDD虚拟显示器完整指南,彻底释放游戏串流潜能 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 想要在没有物理显示器的情况下畅享4K游…...

影刀RPA跨境店群自动化实战:Python协同Chromium底层调度与容器化环境隔离系统架构

定了。在这场旷日持久的跨境电商反爬风控拉锯战中,我们终于用一套基于 Python 深度协同的分布式微服务调度架构,重塑了跨境千店矩阵的自动化底座。 这几天,科技圈被“DeepSeek V4 首发华为昇腾芯片,国产 AI 开始打破英伟达 CUDA …...

手把手教你用Verilog在FPGA上实现Sobel边缘检测(附完整Matlab图片转TXT流程)

从图像到硬件加速:FPGA实现Sobel边缘检测全流程实战指南 在计算机视觉领域,边缘检测作为基础预处理步骤,直接影响着后续特征提取和目标识别的精度。传统基于CPU的算法实现往往难以满足实时性要求,而FPGA凭借其并行计算能力和低延迟…...

工业网络零中断的秘密:手把手教你理解并配置PRP协议(基于IEC 62439-3)

工业网络零中断的秘密:手把手教你理解并配置PRP协议(基于IEC 62439-3) 在钢铁厂轧机轰鸣的生产线上,或是高铁信号控制系统的毫秒级响应中,任何网络中断都意味着数百万损失甚至安全事故。传统冗余技术如RSTP需要秒级收敛…...

当 SpringBoot 请求踏上“七层之旅”:OSI 模型与你的每一行代码

你在 Controller 里写了一个 GetMapping,浏览器敲下回车,数据就回来了。 可你有没有想过,这短短几十毫秒里,你的数据经历了多少次“变装”和“安检”? 从 HTTP 报文到 TCP 段,再到 IP 包、以太网帧——每一…...

Taotoken在应对大模型API服务波动时的路由与容灾机制体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken在应对大模型API服务波动时的路由与容灾机制体验 1. 背景与观测场景 在开发实践中,我们时常会遇到依赖的某个…...

探索罗技鼠标宏:掌握PUBG压枪技术的完整路径

探索罗技鼠标宏:掌握PUBG压枪技术的完整路径 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在《绝地求生》这款竞技性极强的射击游戏…...

卡尔曼滤波在目标跟踪中的应用:原理、建模与工程调参实战

1. 项目概述:从“猜”到“算”的跟踪艺术在目标跟踪这个领域,无论是自动驾驶中预测前车的轨迹,还是无人机锁定移动的物体,亦或是视频监控里框住一个行走的人,我们核心要解决的都是一个问题:如何在充满噪声和…...

赶Due救急必看!从飙红到安全线:5款降AI工具红黑榜与免费指令微调法

为了找到真正靠谱的解决方案,我过去测试了市面上大部分号称能降低ai率的方法。从一分钱不花的模型指令,到各种付费的专业降ai率工具,用手头的文本做了几十次实操对比。说心里话,里面套路确实不少,有些方法用完后语句颠…...

Arduino步进电机控制:按键调速与定时器中断实现

1. 项目概述与核心需求解析最近在捣鼓一个自动化小装置,核心需求就是通过几个物理按键来控制步进电机的动作,比如正转、反转、加速、减速或者停止。这听起来像是很多创客项目、小型自动化设备或者教学演示里最基础的一环。我猜你可能是电子爱好者、学生&…...

别再乱删C盘文件了!手把手教你用任务管理器和命令行精准清理流氓软件残留

别再乱删C盘文件了!手把手教你用任务管理器和命令行精准清理流氓软件残留 每次打开电脑看到C盘飘红的存储空间,不少用户的第一反应就是打开资源管理器,对着那些看不懂的文件夹和文件按下删除键。这种简单粗暴的操作轻则导致软件异常&#xf…...

告别Chrome依赖:在Edge上完美复刻XPath Helper,打造你的爬虫元素定位工作流

告别Chrome依赖:在Edge上完美复刻XPath Helper,打造你的爬虫元素定位工作流 浏览器工具链的迁移从来不是简单的插件替换,而是一场关于开发习惯与效率的深度重构。当微软Edge凭借Chromium内核的稳定性和内存优化逐渐成为技术工作者的新宠&…...

手把手教你用Obsidian+Excalidraw画流程图,告别切换软件的麻烦

手把手教你用ObsidianExcalidraw画流程图,告别切换软件的麻烦 每次写技术文档时,最让我头疼的就是画流程图。原本思路清晰,一打开绘图软件就卡壳——要么是工具太复杂,要么是画完图还要导出再插入笔记,来回切换几次灵感…...

NAFNet实战指南:无激活函数图像修复模型的深度解析与应用

NAFNet实战指南:无激活函数图像修复模型的深度解析与应用 【免费下载链接】NAFNet The state-of-the-art image restoration model without nonlinear activation functions. 项目地址: https://gitcode.com/gh_mirrors/na/NAFNet NAFNet(Nonline…...

Java WebSocket六种集成方案详解:从JSR 356到Spring生态实战

1. 项目概述最近在折腾一个基于 Spring Cloud 的 WebSocket 集群方案时,我不得不把 Java 生态里那些五花八门的 WebSocket 集成方式都翻了个底朝天。不研究不知道,一个看似简单的 WebSocket,在 Java 世界里竟然有这么多“门派”,从…...

基于CMS8S6990评估板实现高精度电压电流测量:从血氧仪到通用测量工具的移植实践

1. 项目缘起与核心思路最近终于拿到了中微半导体(CMSemicon)正版的CMS8S6990血氧仪开发板。这块板子给我的第一印象就是“精致”,尺寸不大,但该有的接口和功能一应俱全,颇有点“麻雀虽小,五脏俱全”的味道。…...

从VOC到YOLO:用Labelimg标注后,一键转换数据格式的完整避坑指南

从VOC到YOLO:数据格式转换的工程化实践与避坑指南 当你用Labelimg完成目标检测任务的标注工作,看着满屏的XML文件,是否觉得离模型训练还差"最后一公里"?这恰恰是许多初学者从标注到训练的关键断裂点。本文将带你深入VOC…...

Sitara处理器PRU-ICSS架构解析:工业自动化信息传输系统设计实战

1. 项目概述:工业自动化中的信息传输挑战与Sitara方案在工业自动化领域,信息传输的实时性、可靠性与灵活性,直接决定了生产线的“智商”与“反应速度”。想象一下,一条高速运转的汽水装瓶线,如果无法在毫秒级内感知到原…...

湿敏电阻HR202/CM-R的两种驱动方案详解:IO充放电法 vs. 交流方波AD采样

湿敏电阻HR202/CM-R的两种驱动方案深度解析:从原理到实战选择 在环境监测和智能家居领域,湿敏电阻作为成本效益突出的湿度传感方案,其驱动电路的设计直接影响测量精度和系统稳定性。HR202和CM-R作为市面上常见的湿敏电阻型号,工程…...

联发科MT6873核心板:5G安卓设备开发实战与硬件设计指南

1. 项目概述:MT6873核心板,一款为智能终端注入5G灵魂的“心脏”在智能硬件开发领域,选对一颗“心脏”——也就是核心板或主控模块,往往决定了整个产品的性能上限、功能边界和市场竞争力。今天要深入聊的,就是联发科&am…...

边缘机器学习实战:模型量化、剪枝与TensorRT部署全解析

1. 项目概述:当机器学习遇见边缘“边缘计算”和“机器学习”这两个词,这几年在技术圈里都快被说烂了。但当你真正把一个训练好的模型,塞进一个算力有限、功耗敏感、网络时有时无的边缘设备里,让它去实时处理摄像头画面、分析传感器…...

Tina Linux syslog实战指南:从架构解析到嵌入式日志管理优化

1. 项目概述:为什么你需要关注Tina Linux的syslog在嵌入式Linux开发,尤其是基于全志Tina Linux这类高度定制化的平台上,日志系统是开发者定位问题、监控系统状态的“眼睛”。很多刚接触Tina Linux的朋友,可能会觉得系统日志&#…...

极简TextCNN,五分钟看懂文本分类基线算法

TextCNN引入 TextCNN是基于卷积神经网络实现的用于文本分类的首选基线模型,它没有复杂的循环结构,也不用花费大量时间训练预训练模型,仅通过简单的卷积、池化操作,就能快速捕捉文本中的关键特征,实现文本分类。 Text…...

终极AI自瞄系统:5分钟搭建你的智能游戏瞄准助手

终极AI自瞄系统:5分钟搭建你的智能游戏瞄准助手 【免费下载链接】RookieAI_yolov8 基于yolov8实现的AI自瞄项目 AI self-aiming project based on yolov8 项目地址: https://gitcode.com/gh_mirrors/ro/RookieAI_yolov8 还在为游戏中的精准瞄准而烦恼吗&…...

MoE推理加速全栈优化,从模型切分到KV Cache共享,实测吞吐提升3.8倍,你还在用稠密LLM?

更多请点击: https://codechina.net 第一章:DeepSeek MoE架构解析 DeepSeek MoE(Mixture of Experts)模型通过动态路由机制在推理时仅激活部分专家子网络,显著提升计算效率与模型容量的平衡能力。其核心设计在于将前馈…...

如何用ComfyUI-Impact-Pack实现AI图像精细化处理:从面部修复到高分辨率增强的完整指南

如何用ComfyUI-Impact-Pack实现AI图像精细化处理:从面部修复到高分辨率增强的完整指南 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, …...

Sunshine游戏串流:打造你自己的云端游戏主机

Sunshine游戏串流:打造你自己的云端游戏主机 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在客厅大屏、卧室平板甚至手机上玩书房电脑里的3A大作吗?S…...

淘金币全自动脚本终极指南:每天节省20分钟,淘宝任务一键完成

淘金币全自动脚本终极指南:每天节省20分钟,淘宝任务一键完成 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/t…...