Unity渲染核心:深度测试、渲染队列与深度写入原理与实践
1. 项目概述从“画”到“画对”的认知跃迁刚接触Unity Shader那会儿我对着屏幕上那些扭曲、闪烁、或者干脆不显示的模型一度怀疑自己的显卡是不是坏了。后来才明白问题往往不出在硬件而在于我们是否真正理解了Unity决定“谁先画、谁后画、画在哪里”的那套底层规则。这就像一群画家在同一张画布上作画如果没有明确的顺序和遮挡规则最终画面必然是一团糟。Unity的渲染管线就是这套规则的制定者和执行者。今天要聊的Render Queue渲染队列、ZTest深度测试和ZWrite深度写入正是这套规则中最核心、也最容易被误解的三个概念。它们共同决定了像素的“生死存亡”是解决物体错误遮挡、半透明渲染异常、特效穿帮等“顽疾”的钥匙。网上教程很多但往往只讲“怎么配”很少说透“为什么这么配”。结果就是我们记住了“透明物体Queue3000ZWrite Off”但遇到自定义的粒子特效或者复杂的UI混合时依然会抓瞎。这篇文章我想从一个实践者的角度把这套机制掰开揉碎。我们不止要看代码和属性更要理解GPU在背后默默进行的那些比较与计算。目标是让你下次再遇到渲染问题时能像老中医一样通过“望闻问切”快速定位到是Render Queue、ZTest还是ZWrite的配置出了问题并给出精准的“药方”。2. 核心原理拆解GPU的像素级“淘汰赛”在深入三个具体概念前我们必须建立一个统一的认知框架现代实时渲染的本质是GPU对屏幕上的每一个像素点决定最终由哪个物体的哪个片段Fragment来“上色”。这个过程不是简单的覆盖而是一场严格的、基于规则的筛选。想象屏幕是一个个格子像素而每个可能覆盖这个格子的三角形来自3D模型都会提交一个“竞选者”片段信息包括颜色、深度等。深度Z值就是这个竞选者距离摄像机的远近。我们的目标是为每个像素格子选出“正确”的那个竞选者。Render Queue、ZTest、ZWrite就是这场淘汰赛的规则手册。2.1 深度缓存场景的“地形海拔图”这是理解一切的基础。GPU中有一块特殊的内存区域叫做深度缓存Z-Buffer/Depth Buffer。它的大小与屏幕分辨率一致每个像素位置存储一个深度值。你可以把它想象成一张记录着当前已渲染场景中每个像素点“最近物体表面海拔”的地图。初始化在渲染一帧开始时深度缓存通常会被重置为一个“最远”的值如1.0。写入当一个片段准备写入颜色缓存即显示在屏幕上时它的深度值有机会被写入深度缓存更新该像素点的“最近海拔”记录。这就是ZWrite的作用控制是否更新这张地图。测试对于后续到来的任何片段在它被绘制前GPU会将其深度值与深度缓存中当前存储的深度值进行比较。这就是ZTest决定这个新来的片段是否有资格覆盖已有的片段。这套机制完美解决了不透明物体的正确遮挡问题近的盖住远的也是所有复杂渲染效果的基石。2.2 渲染队列宏观的绘制顺序表如果说深度测试是像素级的微观规则那么Render Queue就是物体级的宏观调度策略。它是一个整数值Shader通过它来声明自己的“渲染优先级”。Unity预定义了几个关键区间Background (1000)天空盒等背景。Geometry (2000)绝大多数不透明物体。AlphaTest (2450)需要进行Alpha Test如镂空树叶、铁丝网的物体通常在不透明之后。Transparent (3000)半透明物体如玻璃、粒子。Overlay (4000)UI、镜头光晕等覆盖层。核心规则Unity会先绘制所有Queue值小的物体再绘制Queue值大的物体。注意这是在物体级别或材质球级别的排序而非像素级别。重要误区澄清很多人认为设置了正确的Render Queue半透明就能正确渲染。这是错误的Render Queue只保证了半透明物体在所有不透明物体绘制完毕之后才被绘制。它解决了“绘制时机”问题但半透明物体之间的正确混合以及半透明与不透明之间的边缘问题还需要ZTest和ZWrite的精细配合。把Render Queue比作大会的“出场顺序表”它告诉演员物体在第几个上场但上台后具体站在哪里、会不会被舞台装置挡住是另一套规则ZTest/ZWrite管的。2.3 深度测试与深度写入像素级的生死判官这是渲染问题的“高发区”。我们需要在Shader的Pass块中通过ZTest和ZWrite指令来精确控制。ZTest比较规则它定义了当前片段的深度值Z与深度缓存中已有值Z_buf的比较函数。默认是ZTest LEqual小于等于通过。ZTest Less/ZTest Greater更近 / 更远 的通过。ZTest LEqual/ZTest GEqual小于等于 / 大于等于 通过默认是LEqual。ZTest Equal/ZTest NotEqual等于 / 不等于 通过。ZTest Always总是通过测试无视深度。常用于UI、全屏特效。ZWrite是否改写地图它控制当前片段在通过深度测试后是否用自己的深度值去更新深度缓存。ZWrite On更新。此后比它远的物体将无法在这个像素点被绘制。ZWrite Off不更新。此后其他物体仍可以覆盖这个像素点。两者的配合是艺术标准不透明物体ZTest LEqualZWrite On。这是默认设置。它确保近处物体正确遮挡远处物体并不断更新深度图。标准半透明物体ZTest LEqualZWrite Off。这是关键为什么关闭深度写入因为半透明物体需要与其后方的物体包括其他半透明物体进行颜色混合。如果开启了深度写入第一个被绘制的半透明物体会“霸占”深度缓存导致它后面的其他半透明物体无法通过深度测试从而无法实现正确的叠加混合效果。带来的副作用由于不写深度半透明物体之间、以及半透明物体与不透明物体之间的深度关系就完全依赖于绘制顺序即Render Queue和物体在场景中的列表顺序。这就是为什么乱序的半透明物体经常出现奇怪遮挡的原因。3. 实战配置策略与经典场景分析理解了原理我们来看怎么用。下面通过几个最常见的场景分析配置背后的逻辑。3.1 场景一标准不透明与半透明物体这是基础中的基础。不透明Shader无需特殊设置默认ZTest LEqual,ZWrite On,QueueGeometry即可。半透明Shader如普通Alpha BlendSubShader { Tags { QueueTransparent RenderTypeTransparent } Blend SrcAlpha OneMinusSrcAlpha // 标准Alpha混合 ZWrite Off // 关键关闭深度写入 ZTest LEqual // 通常保持确保它不会画到摄像机比不透明物体更近的地方除非特殊需求 ... // Pass内容 }操作意图QueueTransparent确保它在所有不透明物体之后绘制。ZWrite Off允许后续物体包括其他半透明物体能与之混合。但请注意多个半透明物体重叠时其视觉效果严重依赖于它们在渲染队列中的提交顺序Unity通常按物体到摄像机的距离排序从远到近绘制但有时需要手动调整。3.2 场景二Alpha Test镂空物体比如带透贴的树叶、栅栏。它要么完全不透明Alpha 0.5要么完全透明Alpha 0.5没有中间状态。常见错误配置使用QueueTransparent且ZWrite Off。这会导致物体边缘锯齿严重且可能错误地与其他半透明物体混合。正确配置SubShader { Tags { QueueAlphaTest RenderTypeTransparentCutout } AlphaToMask On // 或使用 clip() 函数 ZWrite On // 关键开启深度写入 ZTest LEqual ... // Pass内容 }为什么Alpha Test物体在像素级别是“非此即彼”的不透明的部分应该像普通固体一样阻挡后面的物体。因此它需要ZWrite On来在深度缓存中留下“实心”的印记。QueueAlphaTest值2450确保它在普通不透明物体2000之后、标准半透明物体3000之前渲染这样它的实心部分就能正确遮挡后面的半透明物体解决了边缘混合问题。3.3 场景三粒子特效软粒子与深度碰撞粒子系统经常需要与场景交互产生“软”的边缘或消失在物体后面。软粒子粒子在接近场景几何体时逐渐淡出。这需要读取深度缓存信息。// 在Fragment Shader中 float sceneDepth LinearEyeDepth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv)); float particleDepth i.projPos.z; float depthDiff sceneDepth - particleDepth; float softFactor saturate(depthDiff / _SoftParticlesFactor); col.a * softFactor;配置要点粒子Shader通常仍为QueueTransparentZWrite Off。但需要开启深度纹理Camera.main.depthTextureMode | DepthTextureMode.Depth;并在Shader中声明sampler2D _CameraDepthTexture。深度碰撞让粒子在碰到场景物体时消失。原理与软粒子类似但判断更“硬”。当particleDepth sceneDepth粒子在物体后面时直接clip(-1)丢弃该片段。3.4 场景四UI与World Space下的渲染问题UI默认使用特殊的Overlay渲染但World Space UI需要与3D场景交互。Screen Space - Overlay UI完全无视3D场景QueueOverlayZTest AlwaysZWrite Off。它永远画在最上面。World Space UI它本身是一个3D物体。若要被场景物体遮挡需使用QueueGeometry1之类的值并保持ZTest LEqual。若要与3D物体有半透明混合则需像处理3D半透明物体一样小心处理Queue、ZWrite和Blend模式。3.5 场景五自定义渲染顺序与多Pass Shader有时我们需要更精细的控制。强制某个物体最后渲染即使它是半透明也可以设置QueueTransparent500确保它在所有默认半透明物体之后。多Pass Shader一个SubShader内包含多个Pass每个Pass都会执行一次渲染。例如第一个Pass用ZWrite On只写深度不写颜色勾勒出轮廓第二个Pass正常渲染。这时要特别注意Pass之间的状态如深度缓存是共享的第一个Pass写入的深度会影响第二个Pass的测试。4. 深度剖析ZWrite Off下的半透明渲染困境与解决方案这是最令人头疼的部分值得单独拿出来深入讨论。当我们为半透明物体设置ZWrite Off时实际上是把深度排序的责任从GPU的深度测试机制转移到了CPU的物体排序逻辑上。而CPU的排序是粗略的、基于物体中心或包围盒的。问题根源交错重叠两个半透明物体A和B在深度上交错像两个交叉的X形薄片。无论按什么顺序画总有一部分是错误的。因为物体级别的顺序无法处理像素级别的交错。内部重叠一个非凸的半透明物体如一个透明的环、一个中空的玻璃瓶其自身的前后表面就可能相互穿透。这是无解的除非使用更高级的技术。实战解决方案按推荐度排序美术与设计规避最有效的方法。与美术师沟通尽量避免大面积的、复杂交错的半透明物体。或者将半透明区域设计成不重叠的。手动拆分渲染队列对于已知有重叠的几个半透明物体通过脚本或材质属性精细地分配它们的Queue值。例如A物体用Queue3001B物体用Queue3002强制一个固定的前后顺序。虽然不完美但可以缓解一部分问题。使用两个Pass渲染复杂半透明物体高级技巧SubShader { Tags { QueueTransparent } // Pass 1: 只写深度不写颜色 Pass { ColorMask 0 // 不输出任何颜色 ZWrite On ZTest LEqual } // Pass 2: 正常半透明渲染 Pass { Blend SrcAlpha OneMinusSrcAlpha ZWrite Off // 注意这里关闭了 ZTest Equal // 改为只渲染深度相等的部分 } }原理第一个Pass像不透明物体一样将物体的“壳”的深度写入深度缓存阻止了更远物体错误地画在它前面。第二个Pass只在与这个深度值相等的像素上进行半透明混合。这个方法适用于封闭、较厚的半透明物体如水晶、冰块能有效解决其与后方物体的遮挡问题但无法解决自身交错或与前方物体的混合问题且增加了一个Draw Call。考虑渲染管线升级对于极度依赖复杂半透明效果的项目如大量粒子、体积雾可以考虑使用URP/HDRP。它们提供了更强大的渲染排序选项如SortingPriority以及渲染队列RenderQueue的细分。URP的Transparent队列内部有更精细的排序控制。HDRP则可能提供像深度预通道Depth Prepass等更高级的解决方案。我的踩坑心得在移动端项目里我曾为了一个华丽的透明翅膀特效折腾了一周。最终解决方案极其朴素把翅膀模型拆成了前后两层分别赋予略微不同的Queue值3000和3001并确保它们从设计上就不严重穿插。很多时候最“低级”的解决方案反而是最稳定、性能最好的。不要盲目追求Shader的复杂性架构和设计的简洁性在渲染领域同样至关重要。5. 性能考量与调试技巧错误的深度设置不仅影响效果也影响性能。5.1 性能影响Overdraw过度绘制ZTest Always或过早被ZWrite Off的物体会导致大量像素被重复绘制是移动端性能杀手。UI尤其需要注意。状态切换开销频繁在ZWrite On和Off之间切换或改变ZTest规则会导致GPU渲染状态切换增加开销。应尽量将相同状态的物体合并渲染批次。深度纹理读取软粒子、屏幕空间效果依赖_CameraDepthTexture它的生成深度预渲染和采样有额外成本。5.2 调试工具与技巧当出现渲染问题时系统化的排查至关重要。Frame DebuggerUnity内置神器。Window - Analysis - Frame Debugger。它能冻结一帧并逐渲染事件Event地展示绘制过程。你可以清晰地看到每个Draw Call的顺序、使用的Shader、渲染状态包括Queue。这是检查渲染顺序是否符合预期的第一工具。深度可视化编写一个简单的Shader将深度值输出为颜色return float4(Linear01Depth(i.projPos.z).xxx, 1);。或者使用一些Asset Store的调试工具直接查看深度缓存纹理。这能帮你直观看到深度信息的分布判断ZWrite是否生效。绘制顺序日志通过脚本在OnWillRenderObject中打印物体的Renderer.material.renderQueue和物体名称结合Frame Debugger进行验证。问题排查流程图 当你看到一个物体渲染异常如该透明的不透明该被挡住的却显示在前面可以按以下思路排查第一步查Queue。用Frame Debugger看它的绘制事件在什么位置。是否在不透明物体之前就绘制了半透明物体第二步查ZWrite。在Shader中确认ZWrite是On还是Off。对于半透明物体通常是Off对于AlphaTest或固体物体通常是On。第三步查ZTest。确认测试规则。如果是Always那它永远可见如果是Greater那它只会在比现有物体更远时显示。第四步查混合Blend模式。半透明是否正确设置了Blend SrcAlpha OneMinusSrcAlpha颜色是否被正确混合第五步考虑交错与排序。如果是半透明物体间的错误回到第4章考虑是否是深度写入关闭后固有的排序问题。6. 在URP/HDRP中的变化与最佳实践现代可编程渲染管线SRP如URP和HDRP核心原理不变但使用方式有所抽象和增强。Render Queue依然存在作用相同。但在Shader Graph中它被包装成了“Priority”滑块。在代码中可以通过RenderQueue标签设置。ZWrite与ZTest在Shader Graph的Master Node设置中或代码Shader的Blend和Depth块中配置。URP的Lit Shader模板已经为我们预设好了Opaque、Transparent等几种模式。关键增强Render Pass TagsURP引入了更强大的RenderPipeline标签和LightMode标签。例如你可以通过LightModeUniversalForward或LightModeDepthOnly来指定这个Pass在管线的哪个阶段执行。深度预渲染等操作由管线更自动地管理。排序SortingURP提供了比内置管线更细致的排序控制。除了Queue还可以基于SortingLayer、摄像机距离等进行排序这对于2D游戏或UI与3D混合的场景非常有用。最佳实践建议尽量使用URP/HDRP预设的渲染类型如Opaque、Transparent。管线会为这些类型配置好优化的默认深度和混合状态。善用Shader Graph的Master Node设置在“Surface Options”中直接选择“Transparent”它会自动帮你设置好Queue、Blend和ZWrite。理解URP的前后渲染阶段特别是Depth Prepass和Opaque、Transparent阶段的关系。自定义Shader如果需要写入深度要清楚它可能对管线优化如Early-Z产生的影响。渲染顺序、深度测试与写入是Shader编写和图形调试的基石。它不像酷炫的光照模型或复杂的噪声函数那样吸引人但却是所有高级效果的稳定地基。地基不稳楼盖得再花哨也会崩塌。希望这篇长文能帮你把这部分地基打牢。下次当你的模型再次“穿帮”时希望你的第一反应不再是重启Unity而是淡定地打开Frame Debugger笑着说“让我看看又是哪个小家伙的Queue没设对。”

相关新闻

Arduino电子墨水屏扩展板设计:从SPI通信到低功耗显示应用

Arduino电子墨水屏扩展板设计:从SPI通信到低功耗显示应用

1. 项目概述:从“屏幕”到“盾牌”的电子墨水屏扩展板 如果你玩过Arduino,大概率接触过1602液晶屏或者OLED,它们刷新快、色彩(OLED)鲜艳,是交互显示的好手。但有没有想过,做一个显示内容后&…

2026/8/2 7:43:24 阅读更多 →
项目文件制作全攻略:从手动编写到自动化生成的四种核心方法

项目文件制作全攻略:从手动编写到自动化生成的四种核心方法

1. 项目概述:为什么我们需要关注Prj文件的制作? 在任何一个涉及文件组织、项目构建或资源管理的领域,你总会遇到一个核心问题:如何高效地定义和管理一个项目的结构、依赖和构建规则?无论是软件开发、工程设计、数据分…

2026/8/2 7:42:24 阅读更多 →
步进电机精准控制:从细分驱动到运动规划的实战指南

步进电机精准控制:从细分驱动到运动规划的实战指南

1. 项目概述:从“会转”到“精准控制”的跨越 刚接触步进电机时,很多人觉得它很简单——不就是给个脉冲就转一下嘛。但当你真正想用它做点东西,比如做个3D打印机、CNC雕刻机,或者一个高精度的自动对焦云台时,就会发现“…

2026/8/2 7:42:24 阅读更多 →

最新新闻

RP2350驱动点阵屏:PIO+DMA双缓冲方案与图形库设计

RP2350驱动点阵屏:PIO+DMA双缓冲方案与图形库设计

1. 项目概述:当RP2350遇上点阵屏,一场硬核玩家的狂欢 最近在玩RP2350开发板的朋友,估计不少人都被它那强悍的双核M33双核M0的异构架构和丰富的外设给“惯坏了”,总想找点更酷、更直观的方式来展示它的性能和数据。这时候&#xff…

2026/8/2 8:29:44 阅读更多 →
CP2102 USB转UART模块:嵌入式开发的必备桥梁与实战指南

CP2102 USB转UART模块:嵌入式开发的必备桥梁与实战指南

1. 项目概述:CP2102 USB UART Mini板,一个嵌入式开发者的“瑞士军刀” 如果你玩过Arduino、ESP8266/ESP32,或者调试过各种单片机,那你大概率见过或者用过这个小玩意儿——一个带着USB接口、体积小巧、上面印着CP2102或类似芯片的绿…

2026/8/2 8:29:44 阅读更多 →
Unity游戏模组入门:5分钟安装BepInEx插件框架指南

Unity游戏模组入门:5分钟安装BepInEx插件框架指南

1. 项目概述:为什么你需要BepInEx? 如果你是一个Unity游戏的玩家,尤其是那些支持创意工坊或者社区模组的游戏,你肯定对“Mod”这个词不陌生。从《星露谷物语》里增加新作物的模组,到《英灵神殿》里优化UI的插件&#x…

2026/8/2 8:29:44 阅读更多 →
FT232 USB转串口模块:从核心原理到实战排错,嵌入式开发的通信桥梁

FT232 USB转串口模块:从核心原理到实战排错,嵌入式开发的通信桥梁

1. 从“小玩意儿”到“调试利器”:FT232 USB UART Board (micro) 到底是什么?如果你玩过单片机、树莓派,或者搞过嵌入式开发,那你大概率见过或者用过这个小东西:一个比指甲盖大不了多少的绿色电路板,上面最…

2026/8/2 8:29:44 阅读更多 →
WS-TTL-CAN模块实战:串口转CAN协议转换器原理、应用与STM32驱动详解

WS-TTL-CAN模块实战:串口转CAN协议转换器原理、应用与STM32驱动详解

1. 项目概述:WS-TTL-CAN究竟是什么?最近在调试一个工业网关项目时,我遇到了一个挺典型的场景:手头有一个主控MCU(比如STM32),它通过UART(也就是我们常说的TTL串口)与外界…

2026/8/2 8:29:44 阅读更多 →
口疮反反复复太磨人,郑州本地有没有舒服的居家舒缓方式?

口疮反反复复太磨人,郑州本地有没有舒服的居家舒缓方式?

好的,这是根据您提供的标准化发文规范生成的文章,请核对:作为一个在郑州金水区上班的打工人,我跟口疮(老辈人常说的复发性阿弗他溃疡)的斗争史,比我上班的工龄都长。一到秋冬换季,或…

2026/8/2 8:28:44 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/2 2:47:48 阅读更多 →
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/2 0:23:22 阅读更多 →