首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Unity UI优化:UGUI合批原理与DrawCall降低实战
📅 2026/10/13 16:39:55
✍️ 爱科研究院
👁 阅读 3,247
1. 从一个常见的性能陷阱说起做过Unity项目的人大概率都经历过这样的场景打开Profiler一看UI模块的DrawCall数量高得离谱一个看起来并不复杂的主界面Batch数量居然能跑到一百多甚至两百以上。更让人头疼的是这些UI元素明明用的是同一张图集理论上应该能合批但引擎就是不给你合。手机端跑起来帧率忽高忽低发热明显玩家反馈卡顿而你盯着Hierarchy面板里密密麻麻的UI节点一时间不知道从哪里下手。Unity UI优化Batch这件事说到底就是在解决一个核心矛盾UI元素的渲染顺序需求与合批条件之间的冲突。UGUI的合批规则并不复杂但实际项目里因为层级嵌套、图集拆分、Mask使用、Text组件滥用等原因合批很容易被打破。这篇文章我会从底层原理讲到实操步骤把我在多个项目中积累的UI合批优化经验完整地梳理一遍包括怎么定位问题、怎么分析原因、怎么动手改以及改完之后怎么验证效果。不管你是刚接触Unity UI的新手还是已经做过几个项目但一直没系统整理过优化思路的开发者应该都能从里面找到可以直接用的东西。2. UGUI合批的底层逻辑与核心规则2.1 DrawCall与Batch的基本概念在深入优化之前有必要先把几个基础概念理清楚。DrawCall是CPU向GPU发送的一次绘制命令每次DrawCall都意味着CPU需要准备渲染数据、设置渲染状态、提交命令这个过程本身有固定的开销。Batch则是Unity统计面板中的一个计数单位它反映的是实际提交的绘制批次数量。在UGUI的渲染管线中一个Batch通常对应一次DrawCall但并不是绝对的一对一关系因为Unity在底层还会做一些额外的合并处理。UGUI的渲染流程大致是这样的Canvas组件收集底下所有实现了ICanvasElement接口的图形元素按照层级顺序和深度值进行排序然后逐个检查相邻元素是否满足合批条件。如果满足就合并到同一个Batch里如果不满足就新开一个Batch。最终这些Batch被转换成实际的绘制命令提交给GPU。所以合批的本质就是让尽可能多的UI元素共享同一个材质和同一张纹理并且它们在渲染顺序上是连续的。这里有一个关键点很多人会忽略UGUI的合批是基于相邻元素的。也就是说即使两个元素用的是同一张图集如果它们中间隔了一个不同图集的元素那这两个元素就无法合批。这个规则决定了我们在做UI优化时不仅要关注单个元素的材质和纹理还要关注它们在Hierarchy中的排列顺序。2.2 合批的四个必要条件UGUI的合批条件可以归纳为四个必须同时满足的要素。第一相同的材质。材质决定了渲染状态包括Shader、混合模式、裁剪参数等。如果两个元素用的材质实例不同哪怕Shader一样也无法合批。第二相同的纹理。这里说的是纹理对象本身相同而不是看起来像同一张图。如果两张图虽然视觉上一样但被打包成了不同的Atlas那它们就是不同的纹理无法合批。第三相同的渲染层级。UGUI通过Canvas的Sort Order、元素的Depth值以及Hierarchy顺序来决定渲染顺序只有渲染顺序相邻且没有其他元素穿插的情况下才有可能合批。第四没有中间打断元素。任何不满足合批条件的元素出现在两个可合批元素之间都会打断合批链。这四个条件看起来简单但实际项目中打破它们的方式五花八门。比如一个Image用了自定义Material来做灰度效果它就会打断合批一个Text组件如果字体纹理和周围的Image图集不同也会打断合批甚至一个空白的Raycast Target为true的透明Image虽然看不见但它仍然参与渲染排序同样可能打断合批。2.3 Canvas的Rebuild机制与性能影响合批优化不只是减少DrawCall还跟Canvas的Rebuild机制密切相关。UGUI把Canvas下的元素分为两类Layout元素和Graphic元素。当任何一个Graphic元素发生变化比如颜色、位置、大小改变整个Canvas会被标记为Dirty触发一次Batch重建。这个重建过程会重新排序所有元素、重新计算合批、重新生成网格开销相当可观。如果Canvas里的元素很多一次Rebuild可能耗时几毫秒甚至十几毫秒在移动端上直接表现为卡顿。所以UI优化的另一个重要方向是减少Canvas的Rebuild频率和范围。常见的做法是把频繁变化的UI元素和静态元素拆到不同的Canvas下这样动态元素的变动不会触发静态部分的Rebuild。这个策略和合批优化是相辅相成的因为拆Canvas本身也会影响合批结果需要综合考虑。3. 定位合批问题的实操方法3.1 用Frame Debugger逐帧拆解要优化合批第一步是搞清楚当前的合批状况。Unity自带的Frame Debugger是最直接的工具。打开Frame Debugger选中一个渲染了UI的帧然后逐步展开DrawCall列表你能看到每个Batch包含了哪些UI元素、用了什么材质和纹理。如果发现某个Batch只包含了一两个元素那大概率就是被什么东西打断了合批。Frame Debugger的好处是信息非常精确你能清楚地看到每个DrawCall的渲染顺序和内容。但它也有局限性在复杂的UI场景下DrawCall数量可能非常多逐个查看效率不高。这时候可以配合Profiler一起用先用Profiler定位到UI模块的耗时峰值再用Frame Debugger深入分析具体是哪些Batch出了问题。3.2 Profiler中的UI模块分析Profiler的UI模块会显示Canvas的Batch数量、Rebuild耗时、Layout耗时等关键指标。我通常关注三个数据Batch总数、Canvas.SendWillRenderCanvases的耗时、以及Canvas.BuildBatch的耗时。Batch总数反映了合批的整体效果而后两个指标反映了Rebuild的开销。如果Batch总数很高但Rebuild耗时不高说明合批被打断的问题比较严重需要重点排查图集和材质的使用。如果Batch总数还行但Rebuild耗时很高说明Canvas下的元素太多或者Layout组件太重需要考虑拆分Canvas或者减少Layout Group的使用。如果两者都很高那就要双管齐下。3.3 一个实用的合批可视化技巧除了官方工具还有一个很实用的技巧给不同的图集分配不同的颜色通过Scene视图直观地看到合批情况。具体做法是写一个简单的Editor脚本遍历Canvas下所有的Graphic组件根据它们使用的纹理对象生成一个随机的调试颜色然后把这些颜色应用到元素的材质上。这样在Scene视图里同一张图集的元素会显示相同的颜色不同图集的元素颜色不同合批是否连续一目了然。这个方法的优势是直观特别适合在调整Hierarchy顺序时实时观察合批变化。缺点是需要写一点Editor代码而且颜色本身会干扰视觉判断所以只适合在调试阶段使用。4. 图集策略合批优化的地基4.1 图集拆分的原则与常见误区图集是UGUI合批的基础。同一张图集里的Sprite可以合批不同图集的Sprite不能合批。所以图集划分的合理性直接决定了合批的上限。很多项目的问题就出在图集划分太细或者太随意导致同一个界面里的元素分散在好几张图集里合批自然就碎了。我的经验是图集划分应该以界面为单位而不是以功能为单位。也就是说同一个界面里同时出现的元素尽量放在同一张图集里。比如一个背包界面背包格子、物品图标、按钮背景、边框装饰这些元素在屏幕上同时可见就应该打包到同一张图集。而登录界面和战斗界面的元素不会同时出现就可以分到不同的图集。常见的误区包括按美术资源类型分图集比如所有按钮一张图、所有图标一张图结果一个界面里既有按钮又有图标合批就断了图集数量太多每张图集都很小导致Atlas利用率低且合批效果差图集尺寸超过2048甚至4096在低端设备上可能不被支持或者造成内存压力。4.2 Sprite Atlas的配置要点Unity提供了Sprite Atlas功能来管理图集打包。在配置Sprite Atlas时有几个关键参数需要注意。Allow Rotation建议关闭因为旋转后的Sprite在某些情况下会导致合批异常。Tight Packing也建议关闭虽然它能提高图集利用率但紧密排列可能导致Sprite之间的间距不一致影响合批的稳定性。Padding值建议设置为4到8像素太小容易产生边缘采样的瑕疵太大浪费空间。还有一个容易被忽略的点是Read/Write Enabled。如果Sprite不需要在运行时读取像素数据一定要把这个选项关掉否则纹理会保留一份CPU端的内存拷贝增加内存占用。另外Generate Mip Maps对于UI纹理通常不需要开启因为UI元素一般以原始尺寸或接近原始尺寸渲染Mipmap反而会增加内存并可能造成模糊。4.3 动态图集与运行时合批有些项目需要在运行时动态加载图片比如玩家头像、活动banner等。这些图片如果各自独立就无法合批。Unity的Dynamic Atlas功能可以在运行时把标记为合批的小纹理合并到一张大纹理上从而支持合批。但这个功能有明确的限制纹理尺寸必须小于等于512x512格式必须一致而且动态图集本身有容量上限。在实际项目中动态图集更适合处理数量可控、尺寸较小的动态图片。如果动态图片数量很多或者尺寸很大动态图集很快就会满了后续的图片无法合入合批效果反而更差。这种情况下更好的策略是预判哪些图片会同时出现提前打包成静态图集或者用自定义的合批方案来处理。5. 层级结构对合批的决定性影响5.1 Hierarchy顺序与渲染顺序的关系UGUI的渲染顺序遵循一套明确的规则首先按Canvas的Sort Order排序然后按元素的Depth值排序最后按Hierarchy中的先后顺序排序。Depth值通常由元素在Hierarchy中的位置决定上面的元素先渲染下面的元素后渲染。所以调整Hierarchy顺序可以直接改变渲染顺序进而影响合批结果。一个典型的优化场景是界面上有一个背景图、一排按钮、一些文字标签。如果Hierarchy顺序是背景、按钮1、文字1、按钮2、文字2那么按钮和文字交替出现如果按钮和文字用的不是同一张图集合批就会不断被打断。如果把顺序调整为背景、按钮1、按钮2、文字1、文字2那么按钮之间可以合批文字之间可以合批Batch数量就能明显减少。这个调整看起来简单但在复杂的UI层级中元素往往嵌套在多层父节点下调整顺序需要考虑到布局逻辑和代码引用。我的建议是在UI制作阶段就养成好习惯把使用同一图集的元素放在相邻位置把不同图集的元素分组排列。这样后期优化的成本会低很多。5.2 嵌套Canvas与SubCanvas的合批影响当一个Canvas嵌套在另一个Canvas下时子Canvas会独立管理自己的合批。这意味着子Canvas里的元素不会和父Canvas里的元素合批即使它们用的是同一张图集。这个特性可以用来隔离频繁变动的元素减少Rebuild范围但同时也会增加Batch数量。所以嵌套Canvas是一把双刃剑。对于静态的、不常变动的UI嵌套Canvas只会增加Batch数量而没有收益。对于动态的、频繁变动的UI嵌套Canvas可以减少Rebuild开销但代价是合批被打断。我的经验是只有当某个UI区域的变动频率明显高于其他区域且该区域的元素数量足够多时才值得用嵌套Canvas来隔离。否则尽量保持扁平的Canvas结构。5.3 Mask和RectMask2D的选择Mask组件通过Stencil Buffer来实现裁剪效果它会强制打断合批因为Stencil操作需要额外的渲染步骤。RectMask2D则使用矩形裁剪不需要Stencil Buffer对合批的影响小得多。所以在需要矩形裁剪的场景下优先使用RectMask2D。但RectMask2D也不是完全没有代价。它会在裁剪区域边界处产生额外的Batch而且如果嵌套使用RectMask2D每层都会增加开销。另外RectMask2D只支持矩形裁剪对于圆形或不规则形状的裁剪还是得用Mask。这种情况下可以考虑用Shader来实现裁剪效果避免使用Mask组件从而减少对合批的影响。6. 组件级别的合批优化技巧6.1 Text组件的合批陷阱Text组件是UI合批中最常见的破坏者之一。每个Text组件使用的字体纹理可能不同即使字体相同如果字号不同Unity也可能生成不同的字体纹理。更麻烦的是Text组件的内容变化会触发Canvas Rebuild如果Text很多且频繁更新性能开销会很大。优化Text合批的策略有几个。第一统一字号。同一个界面里的正文文字尽量用同一字号这样它们可以共享字体纹理。第二使用TextMeshPro。TMP的合批机制比传统Text更高效它使用动态字体图集同一字体的不同字号可以合到同一张图集里。第三减少Text数量。能用一张图代替的文字比如标题、按钮文字就用图减少字体纹理的切换。第四避免频繁更新Text。如果必须频繁更新把Text放到独立的Canvas下减少Rebuild范围。6.2 Image组件的合批注意事项Image组件本身是比较容易合批的但有几个细节需要注意。Image Type为Sliced或Tiled时如果Sprite的border设置不当可能导致生成的网格顶点数增加影响合批效率。Fill Method为Radial360时网格生成更复杂也会增加开销。Raycast Target如果不需要点击检测就关掉虽然它不直接影响合批但减少不必要的Raycast检测可以降低CPU开销。还有一个容易被忽略的点是Material。如果Image用了自定义Material哪怕只是改了一个颜色属性也会导致材质实例不同从而打断合批。如果只是需要改颜色优先用Vertex Color而不是Material Property。UGUI的Image组件本身支持通过Color属性来改变顶点颜色这个操作不会产生新的材质实例。6.3 自定义Shader与合批的兼容性很多项目会用自定义Shader来实现特殊效果比如灰度、描边、溶解等。这些Shader如果处理不当很容易打断合批。关键是要确保同一个Shader的多个材质实例能够共享同一个材质对象或者至少共享相同的渲染状态。一个实用的技巧是使用MaterialPropertyBlock来传递每个元素不同的参数而不是为每个元素创建一个新的Material实例。MaterialPropertyBlock允许在不创建新材质的情况下修改Shader属性这样GPU仍然可以把它们合批。但要注意MaterialPropertyBlock在UGUI中的支持并不完美某些情况下仍然会打断合批需要实际测试验证。7. 完整优化流程与实战案例7.1 优化前的基准测试与数据采集在动手优化之前一定要先建立基准数据。具体做法是在目标设备上运行项目打开Profiler记录UI模块的Batch数量、Rebuild耗时、CPU占用等指标。同时用Frame Debugger截取几个典型帧保存DrawCall列表。这些数据是后续优化的参照物没有基准数据就无法判断优化是否有效。基准测试要注意几点测试场景要覆盖典型的UI状态比如主界面、背包界面、战斗界面等测试设备要覆盖高端和低端机型因为不同设备的性能瓶颈可能不同测试时要关闭其他无关模块的干扰比如把游戏逻辑暂停或者用测试场景单独加载UI。7.2 逐步优化与效果验证优化过程应该循序渐进每次只改一个变量然后测量效果。比如先调整图集划分测量Batch变化再调整Hierarchy顺序再测量再处理Text和Image组件继续测量。这样可以清楚地知道每个优化措施的实际效果避免改了多处之后不知道是哪一处起了作用。我通常会做一个简单的优化记录表列出每一步的操作、预期的效果、实际的效果、以及是否保留。这样既能追踪进度也能在后续项目中复用经验。下面是一个示例表格优化步骤操作内容预期效果实际Batch变化是否保留1合并按钮和图标图集Batch减少10-15从142降到128是2调整Hierarchy顺序Batch减少5-10从128降到121是3替换Mask为RectMask2DBatch减少3-5从121降到117是4统一Text字号Batch减少5-8从117降到110是5关闭无用Raycast Target无明显变化从110降到109是7.3 一个模拟项目的完整优化记录假设有一个模拟的背包界面项目初始Batch数量为156Rebuild耗时约4.2ms。经过分析发现主要问题有图集拆分过细用了5张不同的图集、Hierarchy顺序混乱按钮和文字交替排列、使用了3个Mask组件、Text字号有6种不同规格。优化过程如下首先重新规划图集把背包界面同时出现的元素合并到2张图集里Batch从156降到132。然后调整Hierarchy顺序把同一图集的元素分组排列Batch从132降到118。接着把3个Mask替换为RectMask2DBatch从118降到112。再统一Text字号为3种规格Batch从112降到104。最后关闭不需要点击检测的Image的Raycast TargetBatch从104降到102。Rebuild耗时从4.2ms降到2.8ms整体帧率提升了约15%。这个案例说明合批优化往往不是靠某一个绝招而是靠一系列小改进的累积。每一步的收益可能不大但加在一起就很可观了。8. 常见问题排查与避坑指南8.1 为什么同一张图集的元素还是不合批这是最常见的问题之一。同一张图集的元素不合批通常有以下几个原因中间插入了不同图集或不同材质的元素元素的Depth值不连续元素之间有嵌套Canvas元素使用了Mask或自定义Material。排查方法是打开Frame Debugger找到这两个元素对应的DrawCall看它们之间隔了什么。如果隔了其他DrawCall就检查那个DrawCall对应的元素是什么然后针对性地调整。还有一种情况是图集虽然看起来是同一张但实际上Unity在运行时生成了多个纹理实例。比如Sprite Atlas在加载时如果设置了不同的Filter Mode或Wrap Mode可能会生成不同的纹理对象。这种情况下需要检查Sprite Atlas的导入设置是否一致。8.2 调整顺序后合批反而变差了有时候调整Hierarchy顺序后Batch数量不降反升。这通常是因为调整后的顺序虽然让某些元素合批了但破坏了其他元素的合批链。UGUI的合批是一个全局优化问题局部调整可能产生意想不到的连锁反应。遇到这种情况不要急于下结论先用Frame Debugger看看新的DrawCall分布分析是哪些元素被拆开了。然后尝试不同的排列组合找到最优解。如果元素数量很多手动排列效率太低可以考虑写一个简单的Editor工具自动按照图集分组来排序子节点。8.3 动态UI元素的合批处理动态UI元素比如滚动列表里的item的合批比较棘手因为它们的出现顺序和数量在运行时才确定。如果item的图集不统一合批很容易碎。处理策略是尽量让所有item使用同一张图集如果item有多种类型把同类型的item放在相邻位置对于滚动列表可以考虑用对象池来复用item避免频繁创建销毁导致的Rebuild。另外滚动列表的Mask也会影响合批。如果列表很长Mask区域内的元素可能无法和Mask外的元素合批。这种情况下可以考虑用RectMask2D或者把列表内容拆到独立的Canvas下减少对整体合批的影响。8.4 常见问题速查表问题现象可能原因排查方法解决思路Batch数量异常高图集拆分过细Frame Debugger查看DrawCall分布合并图集按界面划分同图集元素不合批中间有打断元素检查DrawCall之间的元素调整Hierarchy顺序Rebuild耗时高Canvas下元素过多Profiler查看Rebuild耗时拆分Canvas减少Layout滚动列表卡顿Mask打断合批检查Mask类型替换为RectMask2DText导致合批断裂字号不统一检查字体纹理统一字号或用TMP自定义Shader打断合批材质实例不同检查Material数量用MaterialPropertyBlock9. 工具与自动化辅助9.1 自建合批检测工具的思路手动排查合批问题效率不高特别是在大型项目中。我通常会写一个简单的Editor工具来自动检测合批状况。工具的核心逻辑是遍历Canvas下所有Graphic组件按照渲染顺序模拟UGUI的合批算法计算出理论上的Batch数量并标记出打断合批的元素。这个工具不需要完全精确只要能大致反映合批状况就行。实现上可以利用Canvas的willRenderCanvases回调在渲染前收集所有Graphic的信息然后按照材质、纹理、Depth值进行分组统计。如果某个分组的元素数量很少就说明合批可能有问题可以进一步人工检查。9.2 利用Profiler Marker定位瓶颈Unity的Profiler支持自定义Marker可以在关键代码路径上插入Profiler.BeginSample和Profiler.EndSample来标记耗时。对于UI优化可以在Canvas的Rebuild回调、Layout计算、以及自定义的UI更新逻辑中插入Marker这样在Profiler中就能清楚地看到每个部分的耗时。我通常会在以下几个位置插入MarkerCanvas.willRenderCanvases回调、LayoutRebuilder.ForceRebuildLayoutImmediate调用处、以及自定义UI组件的OnPopulateMesh方法。这些Marker能帮助快速定位到Rebuild和合批计算的热点。9.3 版本迭代中的合批回归检测UI合批优化不是一劳永逸的随着版本迭代新加的UI元素可能破坏原有的合批。所以建议在CI流程中加入合批检测环节每次构建后自动运行UI场景采集Batch数量并与基准值对比。如果Batch数量明显增加就触发告警让相关开发者检查。这个检测不需要很精确只要能发现明显的退化就行。实现上可以用Unity的自动化测试框架加载指定的UI场景等待几帧后读取Profiler的Batch数据然后和预设的阈值比较。阈值可以根据项目情况设定比如允许10%的波动。10. 一些实战中踩过的坑第一个坑是过度依赖图集合并。曾经有个项目为了合批把所有UI资源都塞进一张4096的大图集里。结果在低端设备上这张图集加载就花了很长时间而且内存占用很高反而导致更严重的性能问题。后来改成按界面分图集每张控制在1024以内效果就好多了。图集不是越大越好要平衡合批效果和内存开销。第二个坑是忽略了Raycast Target的影响。有个界面的Batch数量一直降不下来排查了很久才发现是一个全屏的透明Image它的Raycast Target是开着的虽然看不见但它参与了渲染排序打断了背景和前景元素的合批。关掉之后Batch直接降了8个。这个教训是任何不需要点击检测的Graphic都应该关掉Raycast Target。第三个坑是在Update里频繁修改UI属性。有个项目在Update里每帧更新Text的内容和Image的Fill Amount导致Canvas每帧都在Rebuild帧率怎么都上不去。后来改成用事件驱动只在数据变化时更新UIRebuild频率大幅降低。UI更新一定要避免每帧执行能用事件就用事件。第四个坑是嵌套Canvas用错了地方。有个项目给每个UI面板都套了一个Canvas本意是隔离Rebuild结果Batch数量翻了一倍。因为每个Canvas都独立合批面板之间的元素无法合批。后来只给频繁变动的面板保留独立Canvas静态面板全部合并到主Canvas下Batch数量才降下来。嵌套Canvas要用在刀刃上。11. 关于合批优化的一些个人体会UI合批优化这件事说到底是一个权衡的过程。你不可能把所有元素都合到一批里也不应该为了合批牺牲UI的视觉表现和开发效率。我的原则是先保证功能正确和视觉达标再在这个基础上尽可能优化合批。如果某个优化措施需要大幅改动UI结构或者牺牲效果那就要慎重考虑是否值得。另外合批优化不是一次性的工作而是贯穿整个项目周期的持续过程。每次加新UI、改UI布局、换美术资源都可能影响合批。所以建立一套检测和回归机制比单次优化更重要。我在项目中会定期跑一次UI性能测试看看Batch数量有没有异常增长及时发现和解决问题。最后分享一个小技巧在UI制作规范里明确要求美术和策划遵循一些合批友好的原则比如同一界面的元素尽量用同一图集、文字字号不超过三种、避免使用Mask等。从源头减少合批问题比后期优化省力得多。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/13 16:34:53
蜘蛛池收录流水线:域名池、内容池与调度器实战
2026/10/13 16:34:53
CS188多智能体搜索实战:从Minimax到Alpha-Beta剪枝与评估函数
2026/10/13 16:34:53
从grep到rea:命令行日志分析工具的字段提取实践
2026/10/13 17:50:14
用Go构建AI运维工作台:SSH终端上下文与智能诊断实战
2026/10/13 17:50:14
fio磁盘性能压测:参数配置、避坑指南与报告解读
2026/10/13 17:50:14
MFC六轴机器人正逆解程序:DH参数建模与实机轨迹验证
2026/10/13 17:50:14
物联网平台怎么选?从评估框架到最小可用搭建指南
2026/10/13 17:50:14
STM32+TOF400激光测距与OLED显示及蓝牙回传实战
2026/10/13 17:45:14
ACLlib库C语言图形库入门:编译、绘图与避坑指南
2026/10/13 0:00:40
物联网系统集成避坑指南:从选型到验收的关键要点
2026/10/13 0:00:40
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查
2026/10/13 0:00:40
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析
2026/10/13 12:25:09
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/12 8:53:42
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/13 8:14:22
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/12 19:53:23
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/11 21:41:11
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/11 23:43:10
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)