Unity URP渲染管线调试:解决EndRenderPass报错与CommandBuffer管理
1. 项目概述一次典型的URP渲染管线调试经历最近在优化一个Unity URP项目时遇到了一个让我调试了半天的报错EndRenderPass: Not inside a Renderpass。这个错误不像空引用那样直接它不告诉你哪个脚本第几行而是指向了渲染管线的核心流程。对于很多从内置渲染管线Built-in转向通用渲染管线Universal Render Pipeline, URP的开发者或者刚开始深入URP自定义渲染的同学来说这类错误往往让人一头雾水。它意味着你的代码试图结束一个渲染通道Render Pass但当前并没有一个活跃的渲染通道正在进行。这就像你试图关上一扇根本没打开的门系统自然会报错。这个错误通常不会在编辑器一运行就出现而是在特定的操作序列后触发比如切换相机、使用自定义渲染器特性Renderer Feature或者编写了不规范的CommandBuffer因此排查起来需要一些对URP渲染流程的基本理解。简单来说URP的渲染是围绕ScriptableRenderContext和CommandBuffer来组织的。一个完整的渲染过程被划分为多个渲染通道Render Pass每个通道内可以执行一系列绘制命令Draw Calls或设置渲染状态。你必须严格遵循“开始通道BeginRenderPass” - “执行命令” - “结束通道EndRenderPass”的流程。这个报错的本质就是你的代码执行顺序或逻辑破坏了这一契约。本文将结合我实际踩坑和解决的过程深入拆解URP的渲染流程分析导致这个错误的常见场景并提供一套行之有效的排查和修复方法。无论你是遇到了同样的报错还是希望更深入地理解URP的渲染机制这篇文章都能提供直接的帮助。2. URP渲染流程核心机制解析要理解这个错误我们必须先抛开具体的代码从概念上搞清楚URP是如何组织一帧画面的渲染的。这与我们熟悉的内置管线基于OnRenderImage或直接操作Graphics类的方式有显著不同。2.1 ScriptableRenderContext 与 CommandBuffer 的分工在URP中ScriptableRenderContext是渲染命令的“录制现场”和“执行调度中心”。我们开发者不直接调用GPU指令而是通过向CommandBuffer中填入一系列命令然后再将这个CommandBuffer提交Submit给ScriptableRenderContext由Unity底层在合适的时机执行。你可以把ScriptableRenderContext想象成一个建筑工地的主管而CommandBuffer是工人们拿到的施工图纸清单。主管Context负责协调整个施工流程渲染流程而工人们GPU则严格按照一张张提交上来的图纸CommandBuffer进行作业。BeginRenderPass和EndRenderPass就是图纸上关于“开始一个独立施工阶段”和“结束这个阶段”的标记。如果你在图纸上写了一个“结束阶段”的标记但前面根本没有对应的“开始阶段”标记主管一看图纸就发现流程错了于是报出Not inside a Renderpass的错误。2.2 渲染通道Render Pass的边界与生命周期一个渲染通道定义了一块连续的、具有特定渲染目标Render Target和状态如混合模式、深度测试的渲染工作。在URP中渲染通道主要通过ScriptableRenderPass类来实现。自定义的渲染通道需要继承这个类并实现Execute方法。关键点在于CommandBuffer.BeginRenderPass和CommandBuffer.EndRenderPass必须成对出现并且它们的作用域仅限于单个CommandBuffer之内。你不能在一个CommandBuffer里开始一个通道然后在另一个CommandBuffer里结束它。此外这个“开始-结束”的调用必须发生在CommandBuffer被提交给ScriptableRenderContext之前。URP内置的渲染流程如ForwardRenderer已经为我们管理了主要的渲染通道如不透明物体通道、天空盒通道、透明物体通道。当我们引入自定义渲染如后处理、描边、高斯模糊等时就需要格外小心地管理自己的通道边界确保不与内置流程冲突或产生嵌套错误。3. 报错“EndRenderPass: Not inside a Renderpass”的常见成因与深度排查根据我的经验这个错误几乎总是由于以下三种情况之一引起的。我们可以按照从最常见到较不常见的顺序进行排查。3.1 成因一CommandBuffer 的重复使用与状态残留这是最典型的陷阱。很多开发者为了优化性能会选择在初始化时如Awake或Start创建一个CommandBuffer实例然后在每帧的更新如Update或LateUpdate中重复使用它通过Clear()方法清空旧命令再填入新命令。private CommandBuffer _commandBuffer; void Start() { _commandBuffer new CommandBuffer { name “MyCustomPass” }; } void Update() { _commandBuffer.Clear(); // ... 添加各种命令包括 Begin/EndRenderPass // 将_commandBuffer提交给context }问题所在CommandBuffer.Clear()会清除掉缓冲区内的所有命令但它不会重置CommandBuffer内部的状态机。如果上一帧你在这个CommandBuffer里开始了某个渲染通道BeginRenderPass但由于某些逻辑判断比如if条件不满足你没有执行对应的EndRenderPass那么这个“通道已开始”的状态就会残留到下一帧。当你下一帧再次调用Clear()然后添加新的EndRenderPass命令时对于这个CommandBuffer来说它认为你正在结束一个“新开始”的通道但实际上这个“新开始”的命令可能因为条件判断又被跳过了或者你根本就没添加BeginRenderPass于是就报错了。实操心得这是一个非常隐蔽的错误。你的代码逻辑可能在90%的情况下都是正确的但在某些特定条件如物体移出摄像机视野、特效开关被关闭下BeginRenderPass没有被调用而EndRenderPass却被调用了。由于错误是帧间残留状态引起的它可能表现为间歇性报错难以稳定复现给调试带来极大困难。解决方案最稳妥的方法避免在帧间复用用于复杂渲染逻辑的CommandBuffer。改为在需要提交命令的局部作用域内创建新的CommandBuffer。虽然这会带来微小的GC垃圾回收开销但对于大多数自定义渲染效果来说是可接受的并且能彻底杜绝状态残留问题。void RenderCustomEffect(ScriptableRenderContext context) { CommandBuffer cmd CommandBufferPool.Get(“MyCustomPass”); // ... 配置和添加命令 context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); }使用CommandBufferPool进行获取和释放是URP中的推荐做法它能有效管理内存。如果必须复用确保BeginRenderPass和EndRenderPass的调用在同一帧、同一段连续的逻辑块中绝对成对出现。仔细检查所有条件分支if/else、循环loop和提前返回return的路径确保无论走哪条路径只要开始了就必须结束。可以尝试使用try...finally结构来保证。_commandBuffer.Clear(); bool renderPassStarted false; try { if (shouldRender) { _commandBuffer.BeginRenderPass(...); renderPassStarted true; // ... 其他命令 _commandBuffer.EndRenderPass(); renderPassStarted false; } } finally { // 这是一个额外的安全措施但更好的设计是避免进入这种状态 // if (renderPassStarted) { /* 处理异常情况或许记录日志 */ } }3.2 成因二在错误的渲染阶段调用或提交CommandBufferURP的渲染是一个严格的序列。自定义渲染代码通常通过编写ScriptableRendererFeature和ScriptableRenderPass集成到管线中。ScriptableRenderPass的Execute方法会传入当前的ScriptableRenderContext和一个RenderingData引用。问题场景你可能在Execute方法外部或者在一个与当前URP渲染阶段不兼容的Unity事件回调中例如直接在MonoBehaviour.Update里创建并提交了包含Begin/EndRenderPass的CommandBuffer。例如你写了一个脚本在Update中直接执行以下操作void Update() { var cmd new CommandBuffer(); cmd.BeginRenderPass(...); // ... 一些绘制命令 cmd.EndRenderPass(); // 错误这里没有有效的ScriptableRenderContext来提交。 // Graphics.ExecuteCommandBuffer(cmd); // 即使这样提交也可能与URP主流程冲突。 }Graphics.ExecuteCommandBuffer是立即执行它可能打断了URP自己管理的渲染通道导致状态混乱。解决方案确保你的渲染代码在ScriptableRenderPass.Execute方法内执行。这是URP设计的、用于插入自定义渲染命令的正确位置。在Execute方法内通过传入的ScriptableRenderContext来提交你的CommandBuffer。如果你需要在非渲染线程或特定时机触发渲染考虑使用RenderPipelineManager的事件如beginFrameRendering但即使在这些事件中你也需要获取当前有效的ScriptableRenderContext并且清楚自己插入的渲染阶段避免与已有通道嵌套或冲突。3.3 成因三第三方插件、资源或Shader的不兼容这种情况相对少见但确实存在。一些为内置渲染管线编写的插件或者从Asset Store下载的Shader/效果资源可能会在内部直接操作CommandBuffer并且其代码假设运行在内置管线环境下。当这些代码在URP项目中被运行时其管理渲染通道的方式可能与URP不兼容从而引发错误。排查方法隔离测试如果错误是在引入了某个新插件或资源后出现的尝试逐个禁用这些插件或资源观察错误是否消失。检查Shader某些复杂的Shader可能会使用#pragma multi_compile指令或者包含一些在URP下不被支持的Pass。虽然这更可能导致粉色材质或编译错误但在极端情况下也可能影响渲染状态。查看日志堆栈尽管EndRenderPass: Not inside a Renderpass这个错误信息本身没有堆栈但Unity通常会在同一帧或前后帧输出其他相关错误或警告。仔细查看控制台的全部输出寻找可能指向具体插件或脚本的线索。4. 系统性的调试与修复实战流程当遇到这个报错时不要盲目地东改西改。遵循一个系统的调试流程可以更快地定位问题。4.1 第一步定位触发源由于错误信息没有直接指向你的脚本你需要缩小范围。清空场景创建一个全新的空场景只保留一个主摄像机和一个产生错误的核心对象/脚本。排除其他无关系统的干扰。二分法禁用代码如果你怀疑是自己的自定义渲染器特性Renderer Feature有问题在URP Asset的Renderer配置中暂时禁用它。如果错误消失那么问题就锁定在该Feature及其关联的Render Pass中。使用调试名称在创建CommandBuffer时务必为其指定一个清晰的名字new CommandBuffer { name “MyPostProcessingPass” }。当有多个CommandBuffer时错误信息有时会附带Buffer的名字这能极大帮助定位。4.2 第二步审查自定义Render Pass代码将焦点放在你自己的ScriptableRenderPass实现上特别是Execute方法。检查CommandBuffer生命周期你是如何创建和提交CommandBuffer的是每帧从Pool获取还是复用成员变量强烈建议改为每帧从CommandBufferPool.Get获取并在使用后Release。这是URP的最佳实践能自动处理很多状态问题。审查Begin/EndRenderPass的调用它们是否在同一个CommandBuffer对象上调用它们之间是否有任何条件判断或可能抛出异常的代码确保所有执行路径下都能配对。BeginRenderPass的参数特别是RenderPassAttachment是否配置正确一个无效的配置可能导致通道实际上并未成功启动。检查渲染目标设置在BeginRenderPass之前你是否通过cmd.SetRenderTarget改变了渲染目标在某些复杂的多目标渲染中设置错误也可能间接导致问题。确保你了解当前渲染目标的状态。4.3 第三步使用Frame Debugger进行逐帧分析Unity的Frame Debugger是解决渲染问题的神器。通过Window - Analysis - Frame Debugger打开它。在游戏运行并报错的那一帧暂停游戏。打开Frame Debugger点击“Enable”开始捕获当前帧的渲染事件。仔细浏览事件列表。你会看到URP渲染管线的完整分解每个Camera的渲染、每个Render Pass的开始和结束。找到你自定义的Render Pass事件。检查其内部它是否正常开始了有“Begin RenderPass: YourPassName”的事件它是否正常结束了有对应的“End RenderPass”事件在这个Pass的事件范围内是否有其他意外的“SetRenderTarget”或“Draw Mesh”命令这可能会干扰Pass的内部状态。通过Frame Debugger你可以直观地看到渲染命令的执行顺序和层次关系很多时候问题一目了然。例如你可能会发现你的自定义Pass被意外执行了两次或者它在不透明物体通道之前就被执行了而那时深度缓冲区的状态并不符合预期。4.4 第四步编写最小可复现样例如果以上步骤都无法定位问题或者问题涉及与第三方代码的交互尝试编写一个最小可复现的样例。在一个新项目中只实现最核心的、会触发错误的功能。剥离所有复杂的业务逻辑只保留创建CommandBuffer、调用Begin/EndRenderPass和提交的代码。逐步添加你项目中的其他元素如特定的Shader、特定的渲染状态设置直到错误再次出现。这个过程中你就能精确地找到导致问题的“最后一根稻草”。5. 进阶理解URP渲染图Render Graph与未来兼容性在更新的URP版本中大致从URP 12/13开始Unity引入了实验性的Render Graph系统。这是一个更高级、更安全的渲染命令编排框架。它的核心思想是声明式的资源依赖管理能自动避免很多传统命令缓冲区的典型错误比如资源屏障Barrier错误、读写竞争Race Condition以及我们这里讨论的渲染通道状态错误。在Render Graph中你不再直接手动调用BeginRenderPass和EndRenderPass。而是通过AddRenderPass方法定义一个Pass并在其RecordRenderGraph方法中描述它需要哪些纹理作为输入只读输出到哪些纹理读写。系统会根据这些声明自动构建依赖关系图并决定最优的执行顺序和内存生命周期同时自动插入必要的渲染通道开始和结束指令。对于“EndRenderPass: Not inside a Renderpass”这个错误的意义如果你正在使用或计划迁移到支持Render Graph的URP版本那么遇到这个错误很可能意味着你正在混合使用旧的即时模式Immediate ModeCommandBuffer API和新的Render Graph API这是不被允许的。你需要将相关的渲染代码重构为Render Graph Pass。注意事项Render Graph目前仍是实验性功能API可能发生变化。但对于新建项目或追求长期稳定和性能的项目值得关注和学习。它的引入正是为了解决手动管理渲染状态和资源所带来的复杂性和潜在错误。理解我们当前遇到的这个错误也是理解为什么需要Render Graph的一个很好切入点。6. 总结与核心备忘清单解决EndRenderPass: Not inside a Renderpass的关键在于对URP渲染命令提交机制的理解和严谨的代码编写习惯。它不是一个神秘的Bug而是对开发者遵守渲染管线协议的一种提醒。最后我将最常见的解决方案和检查点整理成一个清单方便你在遇到问题时快速核对排查项正确做法/检查点风险点CommandBuffer 管理在RenderPass.Execute内使用CommandBufferPool.Get()和.Release()。避免在类成员变量中复用CommandBuffer用于包含Begin/EndRenderPass的逻辑。调用配对BeginRenderPass和EndRenderPass必须在同一帧、同一CommandBuffer对象上、连续的代码段中成对调用。仔细检查所有if/else、return、循环break/continue分支确保所有路径都配对。执行上下文自定义渲染命令应在ScriptableRenderPass.Execute()方法中提交。避免在MonoBehaviour.Update等非渲染管线回调中直接提交包含通道操作的CommandBuffer。渲染目标状态在开始渲染通道前明确设置好所需的渲染目标。使用Frame Debugger验证。错误的SetRenderTarget可能导致后续的BeginRenderPass基于无效附件进行引发未定义行为。插件兼容性留意第三方插件或Shader特别是那些标明用于Built-in RP的。不兼容的插件可能会注入破坏URP渲染状态的命令。调试工具善用Frame Debugger逐帧查看渲染事件流。为CommandBuffer设置清晰的名称。盲目猜测而非基于事实渲染事件流分析。我个人在实际项目中的体会是从内置管线转向URP最大的挑战之一是思维模式的转变从相对随意的全局渲染操作转变为在严格定义的渲染通道和管线阶段中插入本地化操作。一旦你习惯了这种“在框架内跳舞”的模式并且养成了使用CommandBufferPool和Frame Debugger的习惯这类渲染状态错误将变得非常容易诊断和解决。记住渲染管线的错误往往是“状态性”的思考问题的角度要从“这一行代码对不对”转向“在这一帧的这个时刻整个渲染管线处于什么状态”。

相关新闻

ChatGPT 在招聘诈骗领域的应用

ChatGPT 在招聘诈骗领域的应用

ChatGPT 在招聘诈骗领域的应用 引言:招聘诈骗的演变与AI的介入招聘诈骗是一种常见的网络犯罪形式,诈骗者通过虚构高薪职位、伪造公司信息等手段骗取求职者的个人信息或金钱。随着ChatGPT等大型语言模型的普及,诈骗者开始利用这些工具生成更逼…

2026/8/19 21:50:43 阅读更多 →
怎样快速解决Zotero中文文献管理难题:Jasminum插件的完整解决方案

怎样快速解决Zotero中文文献管理难题:Jasminum插件的完整解决方案

怎样快速解决Zotero中文文献管理难题:Jasminum插件的完整解决方案 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在…

2026/8/19 14:51:05 阅读更多 →
3步搞定微信聊天记录备份:WechatBakTool终极指南

3步搞定微信聊天记录备份:WechatBakTool终极指南

3步搞定微信聊天记录备份:WechatBakTool终极指南 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTool 你是否…

2026/8/19 7:25:50 阅读更多 →

最新新闻

校园跑腿小程序开发实战:从产品设计到微信云开发部署

校园跑腿小程序开发实战:从产品设计到微信云开发部署

暑假里,很多同学会琢磨着做点项目,既能练手,又能赚点零花钱。其中,“校园跑腿”是个高频出现的想法。你可能也见过不少类似的案例分享,标题里常常带着“校园创业”、“小程序开发”这些关键词,看起来门槛不…

2026/8/21 2:04:37 阅读更多 →
大疆Neo 2图传天线拆装与拉距测试实战指南

大疆Neo 2图传天线拆装与拉距测试实战指南

最近在折腾大疆 Neo 2 的图传性能,发现原装天线在复杂环境下信号衰减比较明显,网上关于天线更换和拉距测试的教程又比较零散。为了彻底搞清楚不同天线对图传距离和稳定性的实际影响,我决定自己动手,对 Neo 2 的图传模块天线进行一…

2026/8/21 2:04:37 阅读更多 →
Android开发本地AI代码生成实战:Ollama+IDE集成指南

Android开发本地AI代码生成实战:Ollama+IDE集成指南

在Android应用开发中,你是否曾设想过,只需描述一个功能需求,IDE就能自动生成对应的代码、布局甚至资源文件?随着AI技术的普及,这种“描述即开发”的愿景正逐渐成为现实。本文将深入探讨如何在Android Code Studio IDE中…

2026/8/21 2:04:37 阅读更多 →
小红书下载工具 XHS-Downloader 怎么用?一条链接从浏览器到硬盘的完整搬家指南

小红书下载工具 XHS-Downloader 怎么用?一条链接从浏览器到硬盘的完整搬家指南

小红书下载工具 XHS-Downloader 怎么用?一条链接从浏览器到硬盘的完整搬家指南 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索…

2026/8/21 2:04:36 阅读更多 →
从零打造模块化磁吸移动电源:32140电芯、PD快充与3D打印全流程

从零打造模块化磁吸移动电源:32140电芯、PD快充与3D打印全流程

最近在折腾3D打印和开源硬件,发现很多朋友对制作一个既实用又有个性的移动电源很感兴趣。尤其是那种能像乐高一样自由组合、通过磁吸方式快速更换功能模块的设计,不仅好玩,还能真正解决“充电宝功能单一、携带累赘”的痛点。今天,…

2026/8/21 2:04:36 阅读更多 →
BilibiliDown怎么用?4步搞定B站高清视频与无损FLAC音频下载

BilibiliDown怎么用?4步搞定B站高清视频与无损FLAC音频下载

BilibiliDown怎么用?4步搞定B站高清视频与无损FLAC音频下载 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirr…

2026/8/21 2:03:36 阅读更多 →

日新闻

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

前言随着国家数字基础设施信创替代、关键技术自主可控战略持续深化,口岸智慧安防、边检智能管控领域正全面进入国产化、自主化、安全可控升级周期。当前国内机场边检旅客识别与定位体系长期依赖国外商用视觉算法、进口成像硬件、闭源通用计算平台,存在核…

2026/8/21 0:00:42 阅读更多 →
别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱当下数字化建设浪潮中,很多项目将三维可视化、视频贴图叠加的数字孪生等同于空间智能。传统数字孪生更多停留在三维场景复刻,擅长把物理世界“画出来、展示出来”,…

2026/8/21 0:00:42 阅读更多 →
105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40C到85C的影像质量一致性——ISP参数温漂补偿与产线标定策略 去年冬天在北方某车厂做A样评审,凌晨四点的黑河试验场,零下三十三度。客户拿了一台冷启动的车,中控屏上倒车影像全是雪花噪点,暗部细节直接糊成一片。我第一反应是sensor温度没上来,暗电流…

2026/8/21 0:00:42 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/19 11:55:18 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/20 6:11:08 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/21 0:14:22 阅读更多 →