Unity 2D游戏开发:Metaballs开源项目实现液体融合特效
1. 项目概述当2D图形遇见流动的生命力如果你在Unity里做过2D游戏尤其是那些需要表现液体、粘液、魔法特效或者有机体融合的场景你很可能被一个看似简单实则棘手的问题困扰过如何让多个独立的圆形、水滴状物体在靠近时能像真正的液体一样自然地“融合”在一起形成一个光滑、连续、动态变化的整体轮廓用传统的Sprite叠加或者简单的碰撞体变形效果往往生硬且不自然。这时一个在图形学领域历史悠久的概念——Metaballs元球就成了解决这类问题的“银弹”。简单来说Metaballs是一种基于隐式曲面的建模技术。它不直接定义物体的边界而是通过空间中一系列“元球”的“势场”函数来定义。每个元球都会向周围空间散发一个能量场通常用数学函数描述比如反比于距离的平方空间中所有元球势场的叠加就形成了一个连续的标量场。我们设定一个阈值Iso-value所有势场值等于这个阈值的点就构成了我们最终看到的那个光滑、流动的曲面边界。当两个元球靠近时它们的势场会叠加导致阈值等值面膨胀并连接在一起视觉上就产生了“融合”的效果。这个原理让Metaballs天生就适合模拟一切柔软、可变性、具有液态或有机质感的物体。在Unity的2D世界里虽然官方没有提供现成的Metaballs解决方案但开源社区的力量是无穷的。今天要深入剖析和推荐的就是一个能让你在Unity 2D项目中快速、高效实现这一酷炫效果的开源项目。它不是一个简单的Demo而是一套包含核心算法、渲染管线、性能优化和实用工具的完整解决方案。无论你是想做一个吞噬一切的史莱姆一片涌动的岩浆池还是一个具有粘稠感的魔法屏障这个项目都能为你提供坚实的技术基础。2. 核心原理与算法拆解从数学公式到屏幕像素在把开源项目“拿来即用”之前理解其背后的核心原理至关重要。这不仅有助于你调试和优化更能让你在需要自定义效果时知道该从哪里下手。Unity 2D Metaballs的核心实现通常围绕以下几个关键环节展开。2.1 势场函数能量的源泉每个Metaball元球的本质是一个势场发射源。最经典、最常用的势场函数是“反平方”函数F(r) 1 / (r^2)其中r是空间中任意一点到该元球中心的距离。这个函数的特点是在中心点r0势能趋于无穷大实际计算中会做特殊处理如钳制随着距离增加势能迅速衰减。当多个元球的势场在空间中叠加时总势场S(x, y)就是所有元球在该点势值的和S(x, y) Σ (1 / (distance_to_ball_i^2))开源项目通常会提供多种势场函数以供选择比如衰减更平缓的线性函数或者为了性能而简化的分段函数。选择哪种函数直接影响了融合的“软硬”程度和计算开销。2.2 等值面提取从数据到形状我们有了整个2D空间的势场值S(x, y)下一步就是提取出可见的轮廓线也就是等值面。我们设定一个阈值T。对于屏幕上的每个像素点或每个我们关心的采样点我们计算其总势场值S然后与阈值T比较如果S T则该点在等值面“内部”通常被渲染为实体如白色。如果S T则该点在等值面“外部”通常被渲染为透明或背景色。这个判断过程就是等值面提取。在2D中这等价于绘制一条闭合的等高线。开源项目的核心任务之一就是高效、准确地对整个渲染区域进行采样和判断。2.3 渲染策略性能与质量的权衡如何在Unity里高效地渲染这个动态变化的等值面主要有两种主流思路也是开源项目通常会采用或提供的选项1. 片段着色器Fragment Shader / Image Effect全屏处理这是最直观、效果最好的方法。我们编写一个Shader在屏幕后处理阶段对输出图像的每一个像素片段执行上述势场计算和阈值判断。优点精度极高效果平滑能完美处理任意数量、任意运动的元球动态变化无比流畅。缺点性能开销大。每个像素都要计算到场景中每一个元球的距离并累加势能。当元球数量N很多时计算复杂度是 O(N * 像素数)。在移动端或低端设备上大量元球可能导致帧率下降。开源项目实现通常会提供一个Monobehaviour脚本挂载在相机上它负责收集场景中所有元球带有特定标签或组件的当前位置和半径然后将这些数据以数组形式传递给一个全屏后处理Shader。Shader遍历数组进行势场计算。2. 基于网格Mesh的近似渲染这种方法不直接计算每个像素而是先通过CPU或Compute Shader计算出等值面的大致形状然后用一个动态生成的网格Mesh来“画出”这个形状最后用普通的Sprite或MeshRenderer渲染这个网格。实现方式之一Marching Squares将2D空间划分为均匀的网格。计算每个网格顶点处的势场值。根据四个顶点与阈值T的比较结果内部/外部共有16种基本配置对应着穿过该网格单元的等值线段应该如何连接。遍历所有网格单元就能得到一系列逼近等值面的线段将这些线段转化为网格。优点性能可控。计算量取决于网格分辨率与元球数量关系相对较小。生成的是矢量轮廓放大不失真。缺点效果精度受网格分辨率限制。分辨率低则轮廓会有“锯齿感”或“块状感”分辨率高则计算量和网格顶点数增加。动态变化时网格需要每帧重建或更新可能引起顶点抖动。开源项目实现可能会提供一个MetaballMeshGenerator类每帧或定时执行Marching Squares算法根据当前元球数据更新一个MeshFilter组件上的网格。一个成熟的开源项目往往会同时提供这两种方案或者以其中一种为主另一种作为备选或扩展。选择哪种取决于你的项目需求追求极致效果和动态性选全屏Shader追求性能可控或需要与Unity 2D物理系统深度交互因为Mesh可以附加Collider则可能选网格方案。3. 开源项目深度评测与实战集成网络上名为“Unity 2D Metaballs”的开源项目不止一个在GitHub或Unity Asset Store都能找到。为了具象化我们的讨论我们以一个假设的、综合质量较高的典型项目为例其设计思想融合了多个优秀开源项目的优点来讲解如何集成、使用并深度定制。3.1 项目结构与核心组件一个设计良好的Unity 2D Metaballs开源项目其文件结构通常清晰明了Assets/ ├── Metaballs2D/ │ ├── Scripts/ │ │ ├── Core/ │ │ │ ├── MetaballManager.cs // 管理器收集所有元球数据 │ │ │ ├── MetaballEntity.cs // 单个元球实体组件 │ │ │ └── MarchingSquares.cs // 如果采用网格生成算法 │ │ ├── Rendering/ │ │ │ ├── MetaballRenderer.shader // 全屏渲染Shader │ │ │ ├── MetaballImageEffect.cs // 挂载相机的后处理脚本 │ │ │ └── MetaballMeshRenderer.cs // 网格渲染器脚本 │ │ └── Utilities/ │ │ ├── EditorExtensions.cs // 自定义编辑器工具 │ │ └── MetaballPresets.asset // 效果预设文件 │ └── Shaders/ │ └── Includes/ │ └── MetaballFunctions.cginc // 公用的势场计算函数库核心组件解析MetaballEntity这是你挂在每个想要成为“元球”的GameObject上的组件。它通常包含以下属性Radius影响范围半径。注意这不等同于渲染大小而是势场衰减的尺度。Strength强度系数。可以放大或缩小该元球的势场贡献用于制作“主球”和“附球”的效果。Blend Mode融合模式。除了相加Add有些项目还支持相减Subtract用于在融合体上“挖洞”。可选Color每个元球可以携带颜色信息在融合时进行颜色混合。MetaballManager这是一个单例或静态管理类。它的核心职责是在Update或LateUpdate中遍历场景中所有激活的MetaballEntity将它们的位置、半径、强度等数据打包成一个数组。这个数组就是渲染环节无论是Shader还是Mesh生成所需的数据源。MetaballImageEffect (配合Shader)这是全屏渲染方案的核心。它挂载在主相机上。在OnRenderImage方法中它从MetaballManager获取数据数组。将这些数据通过Material.SetVectorArray或ComputeBuffer传递给MetaballRenderer.shader。调用Graphics.Blit用这个材质对屏幕图像进行后处理。Shader中对每个像素读取元球数据数组并进行循环计算。MetaballMeshRenderer这是网格渲染方案的核心。它挂载在一个空的GameObject上该对象带有MeshFilter和MeshRenderer。在Update中它从MetaballManager获取数据。调用MarchingSquares算法根据当前数据和设定的网格分辨率生成一系列顶点和三角形。用这些数据更新MeshFilter.mesh。可以为其MeshRenderer分配一个简单的Unlit Color材质来显示。3.2 实战集成五分钟让史莱姆动起来假设我们已经将开源项目包导入Unity。让我们快速创建一个经典的“吞噬史莱姆”原型。创建元球实体在场景中创建多个2D Sprite圆形图作为你的史莱姆基础单元。为每个Sprite GameObject添加MetaballEntity组件。调整Radius到合适大小。设置渲染器以全屏Shader方案为例找到主相机Main Camera为其添加MetaballImageEffect脚本。在Inspector中将项目提供的MetaballRenderer材质拖入该脚本的Effect Material槽。调整材质参数主要是_Threshold阈值。调低阈值融合体变大、更“粘稠”调高阈值融合体收缩、元球更独立。添加运动与控制为你的元球实体编写简单的运动脚本。例如让其中一个元球跟随鼠标其他的元球用简单的Rigidbody2D并施加随机力或相互排斥的力。你会立刻看到当它们相互靠近时光滑地融合成一个整体分开时又优雅地分裂。视觉效果增强颜色混合如果项目支持在MetaballEntity上设置不同的ColorShader中会根据势场权重混合颜色产生绚丽的渐变效果。边缘光滑与描边在Shader中我们不仅可以二值化地判断S T还可以利用S的梯度变化率来制作光滑的边缘过渡smoothstep函数或外发光描边效果。这通常已经在开源项目的Shader中实现只需调节参数。背景与交互Metaball渲染通常是在后处理阶段覆盖在全屏之上的。你需要确保你的游戏背景和前景元素在正确的渲染队列。有时需要将非Metaball物体渲染到单独的图层并在Shader中采样其纹理以实现交互例如Metaballs只在特定背景上显示。3.3 性能调优与高级技巧开源项目提供了基础功能但要应用到实际项目中尤其是移动端性能优化必不可少。1. 全屏Shader方案的优化限制元球数量这是最有效的优化。在MetaballManager中可以设置一个最大数量上限并优先采用距离相机最近的或最重要的元球。在Shader中使用固定长度的数组并传递实际有效数量。降低计算精度在移动端可以考虑将势场计算从float精度改为half精度在片元着色器开头添加precision mediump float;。空间划分与剔除对于大型场景可以实现一个简单的空间网格Grid系统。在Shader中每个像素只需计算与其所在网格及相邻网格内的元球而非全场域元球。这需要将元球数据按网格组织后传入Shader实现较复杂但能极大提升性能。利用Compute Shader将势场计算从片元着色器转移到Compute Shader中并行计算生成一张势场图RenderTexture然后在片元着色器中仅做一次纹理采样和阈值判断。这能将计算复杂度从 O(N*像素) 降为 O(N) O(像素)是处理大量元球的终极方案。一些高级的开源项目会提供此方案。2. 网格Marching Squares方案的优化动态分辨率不要对整个世界使用统一的精细网格。可以根据元球聚集的区域动态调整局部网格的分辨率或者只对摄像机视口内的区域进行计算。增量更新如果元球运动缓慢不必每帧完全重新生成整个网格。可以只更新那些受元球运动影响的局部网格单元。合并网格生成的等值面网格可能由许多小三角形带组成。在提交渲染前可以尝试合并顶点和三角形减少Draw Call。3. 与Unity 2D物理系统的结合这是让Metaballs从视觉特效变为可交互游戏实体的关键。网格方案天生具有优势在MetaballMeshRenderer生成网格后可以同时为这个GameObject添加一个PolygonCollider2D。每帧或定时不必每帧物理更新通常不需要那么高频将计算得到的等值面轮廓顶点数据赋值给PolygonCollider2D.SetPath。这样你的融合体就有了真实的物理碰撞边界可以与其他2D刚体发生碰撞、受力。注意动态更新碰撞体是有性能成本的且过于复杂的轮廓顶点数过多会影响物理模拟效率。可能需要简化轮廓道格拉斯-普克算法或使用多个简单碰撞体如圆形来近似。4. 常见问题排查与实战心得在实际使用开源项目进行开发时你几乎一定会遇到下面这些问题。这里记录了我的踩坑经验和解决方案。4.1 渲染问题诊断表问题现象可能原因排查步骤与解决方案屏幕全黑或全白Shader编译错误或材质参数未正确传递。1. 检查Unity Console是否有Shader编译错误。2. 在MetaballImageEffect脚本中Debug.Log输出传递到Shader的元球数组长度和首个元球数据确保数据有效。3. 在Shader中先用一个固定颜色输出确认Shader本身能运行。元球不融合阈值_Threshold设置过高。逐步调低材质球上的_Threshold参数值。同时检查每个MetaballEntity的Radius和Strength是否过小。融合边缘锯齿严重全屏方案下可能是Shader中缺乏抗锯齿处理网格方案下网格分辨率太低。全屏在Shader中使用smoothstep函数替代硬阈值判断实现边缘平滑。公式float a smoothstep(T - softness, T softness, S);其中softness控制平滑范围。网格提高MarchingSquares算法中的网格单元格大小减小单元格尺寸。移动端帧率暴跌元球数量过多全屏Shader计算负担过重。1. 严格限制场景中活跃的元球数量如最多20个。2. 切换到网格渲染方案。3. 考虑使用简化版的势场函数如线性衰减。4. 如果必须用全屏Shader尝试降低屏幕分辨率Render Scale。元球融合体闪烁或抖动每帧计算顺序或数据传递不一致网格方案中顶点重建导致。全屏确保MetaballManager收集和传递数据的顺序每帧稳定。检查元球位置更新在Update中和渲染在LateUpdate或OnRenderImage中是否存在时序差。网格为网格顶点位置计算增加微小的容差epsilon或对顶点位置进行低通滤波Lerp平滑帧间变化。与UI或其他Sprite渲染冲突后处理Shader影响了整个屏幕包括UI。1. 将UI渲染到单独的相机且该相机不应用MetaballImageEffect。2. 在Shader中利用Unity内置的_MainTex场景渲染结果和_GrabTexture抓屏纹理进行区分处理只对游戏物体层进行Metaball计算。这需要修改Shader采样物体的层级深度或Stencil信息。4.2 来自实战的“血泪”经验“Radius”不是视觉半径新手最容易混淆的一点。MetaballEntity上的Radius参数控制的是势场衰减的“范围”而非最终渲染出的圆圈大小。最终视觉大小由Radius、Strength和全局Threshold共同决定。通常需要将Radius设置为视觉期望大小的2-3倍并通过调整Threshold来精细控制融合形态。性能瓶颈在“数量”而非“大小”增加一个元球带来的性能消耗远大于将一个元球的Radius调大。在性能预算紧张时优先考虑减少元球数量用少数几个大元球来模拟群体而不是使用大量小元球。网格方案的“分辨率陷阱”提高Marching Squares的网格分辨率能获得更光滑的边缘但顶点数量呈平方增长。一个常见的误区是为追求平滑而设置过高分辨率如512x512导致每帧生成数万个顶点性能反而不如全屏Shader。经验值对于手机屏幕大小~1080p的区域128x128或256x256的分辨率通常已能提供足够好的视觉效果同时保持高性能。Shader中的循环展开在Shader中动态循环处理可变长度的元球数组是性能杀手。优秀的开源项目会采用“循环展开”策略。例如设定最大支持32个元球在Shader中直接写32次计算代码但通过if (i _BallCount)来判断是否执行。虽然代码长但避免了真正的循环指令GPU执行效率更高。导入项目时注意查看其Shader是否采用了此优化。与粒子系统的结合想要做飞溅的粘液滴不必让每个粒子都是一个完整的MetaballEntity开销太大。可以这样做让粒子系统正常渲染。同时在场景中放置少数几个如3-5个不可见的“代理”MetaballEntity。编写脚本让这些代理元球的位置跟随粒子群的“质心”或主要簇群。这样你就能用极低的成本让粒子群在宏观上表现出Metaball的融合特性而微观细节由粒子系统自己处理。这个开源项目就像一把精致的瑞士军刀为你打开了2D流体、有机体模拟的大门。从理解势场叠加的数学原理到选择全屏Shader还是动态网格的渲染策略再到最后的性能压榨和实战技巧每一步都充满了图形编程的乐趣与挑战。最关键的是它提供的不是一个黑盒特效而是一个可修改、可扩展的代码框架。你可以根据自己的游戏需求去调整融合的硬度、颜色混合的公式甚至将势场源从“球”拓展到“线”、“异形图”创造出独一无二的视觉效果。

相关新闻

为什么83%的AI辅助开发团队在上线后遭遇质量滑坡?:一文讲透静态分析、动态沙箱与人类反馈的三重校准机制

为什么83%的AI辅助开发团队在上线后遭遇质量滑坡?:一文讲透静态分析、动态沙箱与人类反馈的三重校准机制

更多请点击: https://codechina.net 第一章:AI代码质量评估 AI生成代码正以前所未有的速度融入开发流程,但其质量并非天然可靠。评估AI产出的代码不能仅依赖人工走查或传统静态分析工具的简单套用,而需构建覆盖语义正确性、安全合…

2026/10/7 7:28:28 阅读更多 →
yuzu模拟器终极指南:在电脑上完美运行Switch游戏的完整教程

yuzu模拟器终极指南:在电脑上完美运行Switch游戏的完整教程

yuzu模拟器终极指南:在电脑上完美运行Switch游戏的完整教程 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想要在电脑上体验任天堂Switch游戏的魅力吗?yuzu模拟器为你打开了这扇大门。作为…

2026/10/8 15:00:44 阅读更多 →
Keyviz完整指南:如何将键盘和鼠标操作变成视觉盛宴

Keyviz完整指南:如何将键盘和鼠标操作变成视觉盛宴

Keyviz完整指南:如何将键盘和鼠标操作变成视觉盛宴 【免费下载链接】keyviz Keyviz is a free and open-source tool to visualize your keystrokes ⌨️ and 🖱️ mouse actions in real-time. 项目地址: https://gitcode.com/gh_mirrors/ke/keyviz …

2026/10/8 22:15:54 阅读更多 →

最新新闻

基于SpringBoot+Vue的西安旅游系统管理平台设计与实现

基于SpringBoot+Vue的西安旅游系统管理平台设计与实现

每年到这个时间点,总有不少同学私信问我同一个问题:毕设选题到底选什么,既能赶紧把东西做出来,又不至于在答辩的时候被问得哑口无言。如果你正在发愁这件事,那这套基于SpringBootVue的西安旅游系统管理平台&#xff0c…

2026/10/13 16:16:29 阅读更多 →
Symmetric Ciphers对称加密

Symmetric Ciphers对称加密

Classical Cryptography加密Encryption 加密算法解密Decryption 解密算法Modern cryptography加密 加密算法 密钥Secret Key解密 解密算法 密钥对称加密:同一套密钥负责加密和解密,而且必须满足 解出来的肯定是原来的内容A and B have the same ke…

2026/10/13 16:16:29 阅读更多 →
大模型应用三层架构:输入层、推理层与输出层实战指南

大模型应用三层架构:输入层、推理层与输出层实战指南

1. 为什么“三层架构”是理解大模型应用的万能钥匙很多人第一次接触大模型应用开发时,会被各种新名词砸晕:提示工程、思维链、RAG、Agent、Function Calling、结构化输出、流式响应……每隔几周就冒出一个新概念,感觉永远追不完。但如果你把这…

2026/10/13 16:16:29 阅读更多 →
上下文工程实战:解决多轮对话中模型失忆与格式错乱

上下文工程实战:解决多轮对话中模型失忆与格式错乱

1. 从一个真实困境说起:为什么模型“变笨”了 很多人应该都遇到过这种场景:明明用的是一个能力很强的模型,单轮对话里问它一个独立的问题,回答得又快又好。可一旦把它放进一个多轮交互的系统里,让它连续处理十几个回合…

2026/10/13 16:16:29 阅读更多 →
企业级Agent平台核心拆解:权限、编排与落地实践

企业级Agent平台核心拆解:权限、编排与落地实践

1. 先搞清楚一件事:企业级Agent平台到底解决什么问题 最近国内某头部云厂商正式发布了一款面向企业的Agent平台,消息一出来,我朋友圈里做架构师和技术管理的朋友几乎刷了屏。很多人第一反应是“这不就是又一个大模型套壳产品?”&a…

2026/10/13 16:16:29 阅读更多 →
2026年软件测试面试高频考点与质量保障实战指南

2026年软件测试面试高频考点与质量保障实战指南

最近大半年,我断断续续面了几十个测试候选人,最大的感受是:2026年的软件测试面试题,已经不太看你简历里列了多少工具,大家聊的范围也从“你怎么定位元素”拉到了“你的测试方案能不能扛住一条完整业务链路”。这不是坏…

2026/10/13 16:15:25 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →