Unity插值技术深度解析:Lerp与Slerp的核心原理与实战应用
1. 项目概述从“平滑移动”到“精准过渡”的抉择在Unity开发中无论是让角色从A点移动到B点还是让摄像机平滑跟随亦或是让UI元素淡入淡出我们几乎每天都在和“插值”打交道。它就像是动画和交互的粘合剂负责在两个状态之间填充出平滑、自然的过渡。而Lerp和Slerp正是Unity提供给我们的两把最常用、也最核心的“插值工具”。表面上看它们都叫“插值”功能也类似但在实际项目中选错了工具轻则导致动画效果“不对劲”重则可能引发性能问题或视觉上的穿帮。很多新手开发者甚至一些有经验的同行在面对这两个函数时常常是凭感觉或照搬教程知其然不知其所以然。我自己在带项目和做技术评审时就见过不少因为误用插值而导致的“坑”。比如一个本该沿弧线平滑旋转的炮塔因为用了Lerp而产生了生硬的“拧毛巾”效果又比如一个需要匀速移动的物体因为错误地使用Lerp导致了先快后慢的“缓入缓出”。这些问题根源都在于没有真正理解Lerp和Slerp的内在数学原理和适用场景。今天我们就抛开那些晦涩的数学公式直接从实战出发深入对比Lerp和Slerp帮你建立起一套清晰的选用标准让你在Unity中实现任何过渡效果时都能做到心中有数手到擒来。2. 核心原理拆解线性与球形的本质区别要做出正确的选择我们必须先理解两者最根本的差异。这个差异就藏在它们的名字里Linear interpolation线性插值和SphericalLinear interpolation球形线性插值。2.1 Lerp两点之间的最短直线Lerp的核心思想极其直观在给定的起点A和终点B之间画一条直线然后根据一个从0到1的系数t在这条直线上取一个点。当t0时结果就是A点当t1时结果就是B点当t0.5时结果就是AB线段的中点。在Unity中Vector3.Lerp(a, b, t)和Mathf.Lerp(a, b, t)就是干这个的。它的计算非常高效就是简单的a (b - a) * t。这种“直线思维”让它非常适合处理位置、标量如透明度、浮点数的过渡。但是它的局限性也很明显它只关心起点和终点的坐标完全不关心路径本身是否“合理”。当你把它用在旋转四元数上时问题就来了。四元数表示的旋转存在于一个四维的超球面上两个旋转之间的最短路径并不是在四维空间里“画直线”而是沿着这个超球面的“大圆”弧线。用Lerp对四元数进行插值相当于在这个超球面上强行画了一条直线这条直线很可能会穿到球体内部导致插值出的中间旋转不是单位四元数需要重新归一化并且旋转轴会不断变化产生那个著名的、生硬的“拧动”效果。2.2 Slerp球面上的最短弧线Slerp就是为了解决旋转插值问题而生的。它的目标是在球面对于四元数是单位超球面上找到连接两点的最短弧线并沿着这条弧线均匀移动。你可以想象在地球表面上从北京飞到纽约最短路径不是穿过地心挖条隧道而是沿着地球表面的大圆航线飞行。Slerp就是计算这条“大圆航线”上的位置。Quaternion.Slerp(a, b, t)保证了插值过程中的每一个中间结果都是单位四元数并且旋转轴是恒定或平滑变化的因此能产生恒定角速度、视觉效果平滑自然的旋转动画。这是它最不可替代的价值。然而Slerp的计算比Lerp复杂得多它需要计算点积夹角、反三角函数和正弦函数性能开销显著高于Lerp。所以我们不能因为它“更正确”就无脑在所有地方使用它。核心心法记住这个最根本的比喻——Lerp是“在纸上两点间画直线”Slerp是“在地球球面上找两点间的最短飞行路径”。前者适用于欧几里得空间中的大部分线性量位置、颜色、普通数值后者专为球面或类似结构旋转、法向量、球面坐标设计。3. 实战场景深度对比与选型指南理解了原理我们进入实战。我将通过几个最典型的开发场景来具象化两者的区别和选型逻辑。3.1 场景一物体移动与跟随这是Lerp的绝对主场。// 使用Lerp实现平滑跟随例如摄像机跟随玩家 public Transform target; public float smoothTime 0.3f; private Vector3 velocity Vector3.zero; void Update() { // 方法1使用Vector3.Lerp (简单但非匀速) // transform.position Vector3.Lerp(transform.position, target.position, Time.deltaTime * smoothSpeed); // 方法2使用Vector3.SmoothDamp (更推荐产生平滑的缓动效果) transform.position Vector3.SmoothDamp(transform.position, target.position, ref velocity, smoothTime); }这里有一个至关重要的坑点很多人会用Vector3.Lerp(currentPos, targetPos, Time.deltaTime * speed)来实现“平滑”移动。这会导致非匀速运动因为Lerp的第三个参数t是比例系数不是速度。用上述写法物体在距离目标远时移动快越近越慢永远无法在有限时间内到达目标除非t1。这常用于UI淡入淡出但不适合需要精确控制位移时间的移动。对于匀速移动应该用Vector3.MoveTowards。对于带平滑缓动的跟随Vector3.SmoothDamp内部使用了类似弹簧阻尼的数学是比单纯Lerp更好的选择它能提供更自然的“滞后-追上”效果。那么移动能用Slerp吗理论上如果你想让一个物体沿着球面比如围绕一个星球表面移动Vector3.Slerp是合适的。但这种情况在常规3D游戏非太空或极端球形地图中极少见。99%的物体移动都是Lerp的领域。3.2 场景二旋转与朝向插值这是Slerp的核心战场也是两者差异体现最明显的地方。// 假设我们有一个炮塔需要从当前旋转平滑转向目标旋转瞄准敌人 public Transform turret; public Transform target; public float rotationSpeed 5.0f; void Update() { if (target ! null) { // 计算目标朝向 Quaternion targetRotation Quaternion.LookRotation(target.position - turret.position); // 错误示范使用Lerp进行旋转插值 // turret.rotation Quaternion.Lerp(turret.rotation, targetRotation, Time.deltaTime * rotationSpeed); // 这可能导致旋转轴抖动视觉效果不专业。 // 正确示范使用Slerp进行旋转插值 turret.rotation Quaternion.Slerp(turret.rotation, targetRotation, Time.deltaTime * rotationSpeed); } }关键差异对比实验 你可以创建一个简单的场景放两个Cube一个用Lerp旋转一个用Slerp旋转让它们从同一朝向旋转180度到另一个朝向。观察两者的旋转轨迹可以开启Gizmos绘制旋转轴。你会发现Quaternion.Lerp旋转路径看起来像是在“拧转”物体中间姿态可能不自然角速度不均匀。Quaternion.Slerp旋转路径是最短弧线旋转轴稳定角速度恒定视觉效果干净利落。对于UI元素的2D旋转绕Z轴由于是单一平面内的旋转Lerp和Slerp的差异很小通常用Mathf.LerpAngle来处理角度循环问题更简单。但对于3D物体尤其是需要表现专业、平滑旋转的物体角色转身、摄像机环视、机械臂运动必须使用Slerp。3.3 场景三颜色与数值过渡颜色Color或Color32在RGBA色彩空间中的插值本质上是四个通道分别的线性插值。因此Color.Lerp是绝对正确的选择它会在RGB立方体或RGBA超立方体中沿直线混合颜色。// UI图像淡入效果 public Image uiImage; public float fadeInDuration 2.0f; private float timer 0f; private Color startColor new Color(1,1,1,0); private Color endColor new Color(1,1,1,1); void Update() { if (timer fadeInDuration) { timer Time.deltaTime; float t timer / fadeInDuration; // 计算规范化的比例系数 uiImage.color Color.Lerp(startColor, endColor, t); // 线性插值透明度 } }对于一般的浮点数、整数需转换为浮点的过渡如血量值、音量大小、缩放比例等Mathf.Lerp是不二之选。// 平滑改变物体缩放 float targetScale 2.0f; float scaleSpeed 1.0f; transform.localScale Vector3.one * Mathf.Lerp(transform.localScale.x, targetScale, Time.deltaTime * scaleSpeed);3.4 性能考量与优化技巧在绝大多数现代设备上一次Slerp调用的开销可以忽略不计。但如果你在Update中同时对成千上万个物体进行旋转插值比如一大群鸟的群体模拟性能差异就会显现。性能对比数据粗略估算Vector3.Lerp/Mathf.Lerp约几次浮点乘加运算极快。Quaternion.Slerp涉及点积、Mathf.Acos、Mathf.Sin等超越函数比Lerp慢一个数量级。优化策略按需选用不是旋转操作坚决不用Slerp。使用Quaternion.Lerp并手动归一化在视觉效果要求不高、且旋转角度较小比如小于90度的情况下可以使用Quaternion.Lerp然后对结果调用.Normalized()。这比Slerp快但效果是近似的。这是一个重要的取舍技巧。// 小角度旋转的优化方案 Quaternion approxRotation Quaternion.Lerp(from, to, t); approxRotation.Normalize(); // 手动归一化以纠正长度 // 注意这仍然不是真正的球面插值但小角度下肉眼难辨。减少调用频率对于不重要的背景物体可以考虑每两帧或更长时间间隔更新一次旋转。使用Quaternion.RotateTowards如果你只需要一个恒定角速度的旋转而不需要精确的t比例插值RotateTowards是性能更好的选择它直接计算一个朝向另一个朝向旋转指定最大角度后的结果。4. 高阶应用与常见陷阱解析掌握了基础用法我们来看看一些更深入的应用场景和那些容易踩坑的地方。4.1 非线性插值与缓动函数我们常说的“平滑”不仅仅是Lerp和Slerp能提供的。它们提供的是线性过渡Slerp在球面上是角速度线性。但很多时候我们需要“缓入缓出”Ease-in-out等非线性效果。实现方法不是更换插值函数而是对插值系数t进行变换。Unity的Mathf.SmoothStep就是一个经典的缓动函数。// 使用缓动函数让移动更自然 float linearT Time.time / duration; float easedT Mathf.SmoothStep(0, 1, linearT); // 产生缓入缓出效果 Vector3 pos Vector3.Lerp(startPos, endPos, easedT);你还可以使用AnimationCurve在编辑器里可视化地设计t的变化曲线实现更复杂的运动效果。记住Lerp/Slerp负责“路径”缓动函数负责“沿路径运动的速度变化”。4.2 陷阱一“永远无法到达终点”的Lerp这是新手最常犯的错误前面提到过这里再强调一下// 错误代码物体永远无法精确到达目标点除非t1 void Update() { transform.position Vector3.Lerp(transform.position, target.position, 0.1f); }这段代码每一帧都将当前位置向目标移动10%的剩余距离。这会导致一个经典的“指数衰减”趋近无限接近但永不抵达。正确的做法是使用一个独立的、从0到1变化的t值。// 正确代码在指定时间内到达 float journeyTime 2.0f; float startTime Time.time; void Update() { float fracComplete (Time.time - startTime) / journeyTime; transform.position Vector3.Lerp(startPos, targetPos, fracComplete); }4.3 陷阱二四元数插值前的“朝向检查”在对四元数进行Slerp或Lerp之前有一个最佳实践检查两个旋转是否大致相同或者是否需要走更短的路径。Quaternion.Dot(a, b)可以计算两个四元数的点积其绝对值越接近1说明两者越相似。当点积为负时表示两个四元数代表的是“相反”的旋转旋转角度差超过180度但实际物理朝向可能是相同的。这时直接Slerp会走“长路径”旋转。为了解决这个问题我们通常会在插值前进行判断Quaternion from ...; Quaternion to ...; // 如果点积为负将其中一个取反确保走最短弧路径 if (Quaternion.Dot(from, to) 0) { to new Quaternion(-to.x, -to.y, -to.z, -to.w); } // 然后再进行Slerp Quaternion result Quaternion.Slerp(from, to, t);Unity内置的Quaternion.Slerp已经内部处理了这个问题但如果你自己实现类似逻辑或使用Lerp需要注意这一点。4.4 陷阱三万向节死锁与旋转表示法这是一个比Lerp/Slerp选择更深层的问题但密切相关。Slerp解决的是四元数插值本身的问题但如果你用欧拉角Euler Angles来表示旋转然后去插值欧拉角你会遇到著名的“万向节死锁”问题导致旋转动画出现突然的跳动。黄金法则在Unity中永远使用四元数Quaternion来存储、计算和插值旋转。只在最后需要设置Transform的eulerAngles为了人类可读或从编辑器输入时才与欧拉角打交道。所有中间的旋转插值运算都交给Quaternion.Slerp或Quaternion.Lerp。5. 性能实测与扩展技术选型理论说再多不如实际跑一跑。我们设计一个简单的性能测试脚本在Update中循环执行大量插值操作。public int testCount 10000; private Quaternion[] startRots; private Quaternion[] endRots; private float t 0; void Start() { startRots new Quaternion[testCount]; endRots new Quaternion[testCount]; // 初始化随机旋转 for (int i 0; i testCount; i) { startRots[i] Random.rotation; endRots[i] Random.rotation; } } void Update() { t Mathf.PingPong(Time.time * 0.5f, 1.0f); // t在0-1之间来回变化 // 测试Slerp性能 System.Diagnostics.Stopwatch sw System.Diagnostics.Stopwatch.StartNew(); for (int i 0; i testCount; i) { Quaternion result Quaternion.Slerp(startRots[i], endRots[i], t); } long slerpTime sw.ElapsedTicks; // 测试LerpNormalize性能 sw.Restart(); for (int i 0; i testCount; i) { Quaternion result Quaternion.Lerp(startRots[i], endRots[i], t); result.Normalize(); } long lerpNormTime sw.ElapsedTicks; Debug.Log($Slerp: {slerpTime} ticks, LerpNorm: {lerpNormTime} ticks); }在我的测试环境普通PC下对10000个四元数进行插值Quaternion.Slerp通常比Quaternion.Lerp后接Normalize慢1.5到2倍。这个差距在移动端或VR/AR等高帧率、高负载场景下需要纳入考量。扩展选型Quaternion.RotateTowards与Quaternion.LookRotationQuaternion.RotateTowards(from, to, maxDegreesDelta)这不是一个基于t的插值而是给定一个最大角速度度/帧将from旋转向to。它保证了恒定的角速度性能很好常用于需要限制旋转速度的场景如角色转身速度上限。Quaternion.LookRotation(forward, up)这是一个创建旋转的函数常用于让物体Z轴指向某个方向。它常和Slerp配合使用先计算出目标朝向再平滑旋转过去。6. 总结与最终决策流程图经过以上层层剖析我们可以提炼出最终的、可操作的决策指南什么时候用Lerp插值位置(Vector3)物体移动、摄像机跟随结合SmoothDamp更佳。插值标量(float)血量、音量、时间、缩放等数值变化。插值颜色(Color)UI淡入淡出、材质颜色过渡。插值二维向量(Vector2)UI锚点移动、2D游戏物体位置。小角度旋转且对性能极度敏感时可谨慎使用Quaternion.Lerp并手动Normalize()。什么时候用Slerp插值三维旋转(Quaternion)3D物体旋转、摄像机环视、角色朝向平滑变化。这是刚需。插值单位向量(Vector3.normalized)如果需要让一个方向向量平滑地在球面上变化虽然不常用。任何需要保持“球面”属性并在其上进行最短路径插值的情况。决策流程图开始插值任务 | v 是处理旋转(Quaternion)吗 |是 |否 v v 使用 Quaternion.Slerp 是处理位置/缩放/颜色/普通数值吗 追求完美效果 |是 |否 | v v 考虑性能优化 使用 Vector3.Lerp 使用 Mathf.Lerp 或 |是 |否 / Color.Lerp 其他专用Lerp v v 小角度 保持 |是 Slerp v 使用 Quaternion.Lerp Normalize() 性能与效果的折衷最后我的个人经验是在项目初期或原型阶段不必过分纠结性能先用Slerp保证旋转效果的正确性。在性能优化阶段通过Profiler定位热点如果发现大量旋转插值确实是瓶颈再针对性地对其中不重要的、小角度的旋转尝试替换为LerpNormalize的方案。永远将视觉正确性和代码可维护性放在第一位在必要时才进行微优化。记住Slerp是旋转插值的“标准答案”而Lerp是其他线性过渡的“万能钥匙”用对地方它们都是你手中创造流畅体验的利器。

相关新闻

Excel文本包含判断全解析:从FIND/SEARCH到COUNTIF与多条件实战

Excel文本包含判断全解析:从FIND/SEARCH到COUNTIF与多条件实战

1. 项目概述:从“找”到“判”的Excel核心技能在日常处理数据时,我们常常会遇到这样的场景:面对一份庞大的客户名单,需要快速筛选出所有来自“北京”或“上海”地区的记录;或者在一列产品描述中,检查是否包…

2026/9/26 4:26:48 阅读更多 →
如何3步掌握鸣潮自动化工具ok-ww:智能游戏辅助完整指南

如何3步掌握鸣潮自动化工具ok-ww:智能游戏辅助完整指南

如何3步掌握鸣潮自动化工具ok-ww:智能游戏辅助完整指南 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 还在为鸣潮中重…

2026/10/2 12:27:51 阅读更多 →
2026年最新!选专业智慧园区厂商必看3个筛选要点

2026年最新!选专业智慧园区厂商必看3个筛选要点

我做智慧园区落地5年,最近身边不少甲方朋友问2026年选智慧园区厂商怎么避坑。今天就把这些年踩过的坑、实测过的30多个项目的经验整理出来,没有虚头巴脑的参数堆砌,全是能直接用的筛选标准,帮大家少走弯路。先说说行业里最常见的几…

2026/9/27 5:09:40 阅读更多 →

最新新闻

OpenShell:命令行脚本工程化与自动化任务编排实战

OpenShell:命令行脚本工程化与自动化任务编排实战

1. 从零认识 OpenShell:它到底解决什么问题第一次听到 OpenShell 这个名字,很多人会下意识把它和某个操作系统内核或者远程终端工具联系起来。实际上,OpenShell 是一个面向命令行环境的开源框架,核心定位是把零散的 Shell 脚本、系…

2026/10/5 8:19:08 阅读更多 →
莉莉丝游戏中台Golang面试复盘:GMP调度、系统设计与算法实战

莉莉丝游戏中台Golang面试复盘:GMP调度、系统设计与算法实战

1. 这次面试的背景与准备思路1.1 为什么瞄准莉莉丝的游戏中台方向先说下我自己,工作三年多,一直在做 Go 后端,之前待的是中小厂,业务线偏 To B 交付,技术栈相对保守。去年年末打算看机会,重点锁定游戏行业的…

2026/10/5 8:19:08 阅读更多 →
C6678多核DSP在线升级:Bootloader设计、TFTP/串口通道与掉电自恢复

C6678多核DSP在线升级:Bootloader设计、TFTP/串口通道与掉电自恢复

1. 为什么要给C6678单独做一套在线升级方案 做嵌入式设备维保的人大多有过这种经历:现场几十块板子,某个算法参数要调整,或者发现了修复的bug,结果谁都不敢动,因为芯片是TMS320C6678,程序固化在Nor Flash或…

2026/10/5 8:19:08 阅读更多 →
Checkpoint防火墙从零配置指南:管理服务器、SIC激活与策略下发

Checkpoint防火墙从零配置指南:管理服务器、SIC激活与策略下发

简介:Checkpoint简单配置手册(PDF)是一份面向网络管理员、安全工程师及初级学习者的实操指南,聚焦Checkpoint防火墙从安装到策略下发的完整配置流程。手册以SmartConsole客户端安装为起点,强调仅安装所需组件以避免冗余…

2026/10/5 8:19:08 阅读更多 →
基于Hadoop的游戏推荐商城系统与可视化大屏:离线数仓全流程实战

基于Hadoop的游戏推荐商城系统与可视化大屏:离线数仓全流程实战

在课程设计大厅里看到“大数据基于Hadoop的热门游戏推荐商城系统的可视化大屏”这种题目时,基本就能猜到它的定位:一个需要走完“数据采集 → 数据存储 → 数据清洗 → 数据计算 → 数据应用 → 数据可视化”全流程的经典大数据综合项目。很多同学卡住的…

2026/10/5 8:19:08 阅读更多 →
OpenShell实操指南:把Windows 11开始菜单改回顺手的样子

OpenShell实操指南:把Windows 11开始菜单改回顺手的样子

很多老用户应该都有同感:装完 Windows 11 的第一件事,就是想把左下角的开始菜单改回去。微软把开始菜单居中、把磁贴换成推荐项目、砍掉可调整大小的尺寸,这些改动对触屏设备或许合理,但对键盘鼠标用户来说,效率不升反…

2026/10/5 8:18:07 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →