游戏对象与资源管理:从组件模型到流式加载的工程实践
游戏引擎架构这个系列写到第四篇前面聊了渲染、内存分配、数学库这些偏底层的部分到了这一篇我想认真聊聊游戏对象和资源管理。说实话渲染线程上跑着百万三角形物理引擎算着刚体碰撞这些玩家都看不见玩家真正感受到的是屏幕上那个能跑能跳的角色以及它背后那一整套资源从哪来、什么时候加载、什么时候释放的调度系统。这篇文章会从引擎研发的视角把游戏对象GameObject/Entity的组织方式、组件生命周期、场景图原理以及资源从磁盘到显存再到销毁的全过程拆开来讲覆盖普通开发者最容易踩坑的引用计数、异步加载、内存泄漏和大世界流式加载问题。适合引擎开发新手、客户端主程以及准备自研引擎的团队作参考。这类内容如果只看文档容易看过就忘我尽量多放一些实际工程里的取舍和对照把为什么这么设计讲透。1. 游戏对象不是对象从裸指针到组件模型的演进1.1 万物皆对象的继承树为什么越写越难看早期引擎和不少新手自研框架最初都是一个对象搞定一切的思路。定义一个基类里面塞了Transform、渲染器指针、碰撞盒、音源、动画状态机甚至UI回调都放在同一个类里。最开始跑得很顺畅因为Demo里只有几个物体等游戏内容一多需要做一个既能走路又能播放动画还能触发交互的NPC时继承树就开始疯狂膨胀基类派生出角色类角色类又派生出NPC类NPC再派生出巡逻NPC、对话NPC……每个派生类都继承一堆自己根本用不到的功能。那个年代很多项目就是这么过来的代码里全是空转的虚函数和这个字段我不用但它必须存在的死重。我早期在某团队实习时见过一个迭代三年的老模块一个物体基类挂了三十多个成员变量十几个组件裸指针其中大部分指针在多数对象上都是null。每新建一个对象内存里就背着好几KB用不上的数据。这个问题本质不是代码风格问题而是模型设计问题继承表达的是是什么而游戏里的需求几乎总是能做什么。1.2 组件模型把能力拆成积木块于是业界普遍转向组合优先于继承的思路GameObject只是一个壳它带一个Transform表示位置然后挂一堆组件上去。渲染组件负责画碰撞组件负责物理音源组件负责声音脚本组件负责逻辑组件之间通过消息或接口通信不需要继承同一个祖先。这就是组件模型Component Model。组件模型最大的好处是按需组合。同一个NPC想让它能对话就挂一个对话组件想让它巡逻就挂一个AI组件不想让所有NPC都有AI就不挂。新增功能时不用动继承树只需要新写一个组件再动态挂到对象上。这也让策划和美术能直接在编辑器里拖拽组装对象不用每次都找程序员改代码。组件生命周期有几个关键点新手尤其容易忽略组件的初始化顺序不能依赖挂载顺序否则换一个挂载顺序就会出现难以复现的诡异bug组件之间通过事件解耦比直接拿引用互相调用更容易维护组件销毁时一定要把事件订阅和回调反注册干净否则对象删了、回调还指向它就是经典的悬垂引用。我在项目里见过最典型的翻车案例是某个技能组件在释放时把主角速度改成0但释放顺序偶尔早于移动组件初始化结果角色卡在原地不动。最后排查半天才发现是两个组件的初始化顺序互相依赖了。解决办法是让组件在OnEnable阶段都先登记再在Start阶段统一初始化而不是挂载时立即初始化。1.3 为什么要聊ECS性能逼出来的数据导向设计组件模型虽然灵活但埋了一颗雷对象数量一多比如同时在场几千上万个实体每个实体都持有一堆组件指针内存是散落的CPU缓存完全不友好。现代CPU的运算速度远快于内存访问很多时候瓶颈都卡在等待数据上。所以业界开始研究ECSEntity Component System实体只是一个ID组件是紧密排列的数组比如所有位置连续放一起所有速度连续放一起所有生命值连续放一起系统System则是批量处理这些数组的逻辑。ECS的好处很直接遍历一万个实体的位置更新其实就是对内存里一段连续的struct数组扫一遍处理器缓存命中率极高性能可以比指针式组件模型高出数倍。代价是设计难度明显上升不能用面向对象的思维去写运行时逻辑。对中小团队我的建议是别为了追热点上ECS如果你的场景里动态对象一眼看过去不超几百个组件模型完全够用。ECS是性能约束倒逼数据布局的产物不是一句先进就能套用的。2. Transform层级与场景图对象之间如何挂出父子关系2.1 场景图到底在干什么场景里几乎没有对象是完全孤立的。角色站在载具上载具移动时角色跟着动武器挂在角色手骨上手骨动了武器就动。这种跟着动的关系靠的就是父子层级所有父子变换关系叠加起来就形成一棵变换树也就是场景图Scene Graph。场景图本质上只做一件事把一个节点相对父节点的局部变换逐层叠加成相对世界原点的世界变换。比如一个物体在父节点下偏移了(1, 0, 0)父节点在世界上位于(10, 0, 0)那物体的世界坐标就是(11, 0, 0)。叠加过程是递归进行的典型实现会对每个节点维护一个本地的TRS平移-旋转-缩放矩阵并用dirty标记记录它有没有变化过。只有标记为dirty时才会重新计算并级联更新到所有子节点。2.2 一次实际的世界矩阵计算这里给一个简化但完全可用的数学过程。假设一个对象有父节点P和自身节点L。本地变换矩阵写成 T_local T * R * S即先缩放、再旋转、最后平移这是大多数引擎的约定顺序。世界矩阵就是World ParentWorld * T_local伪代码长这样Mat4x4 Node::getWorldMatrix() { if (dirty) { Mat4x4 local makeTRS(translation, rotation, scale); world parent ? parent-getWorldMatrix() * local : local; dirty false; } return world; }注意矩阵乘法顺序不可交换。如果你在引擎里看到旋转之后再缩放和缩放之后再旋转结果不一样就是顺序问题。具体项目中子节点继承父节点缩放是有坑的非均匀缩放比如x缩放2、y缩放1传到子节点后子节点的旋转会被压扁变成一个斜的椭圆。所以很多引擎在父节点非均匀缩放时会给子节点额外算一个倾斜修正或者干脆限制只在根节点做非均匀缩放。2.3 层级操作的性能陷阱与懒更新场景图最容易出性能问题的地方不是矩阵乘法本身而是你每帧反复读取一棵从来没变过的变换树。好一点的引擎都会做dirty传播节点变换变了只标记自己和子树查询世界矩阵时走到dirty的节点才重算。这个思路跟渲染里的脏矩形标记是一样的尽量不重算没变化的东西。但dirty传播也有坑。如果某个父节点频繁变化而它有几千个子节点那每隔几帧就要重算上千次矩阵级联。虽然单次乘法开销不大但在移动设备上高频触发也会掉帧。实际工程里的优化方向有两个对只读但不常变的节点做变换结果缓存对高频变化的肢体骨骼这类层级不上场景图改成骨骼数组直接计算因为骨骼系统对矩阵批量更新有更强的数据导向优化空间。我还踩过一个坑把UI也放进渲染场景的变换树里。UI节点层级往往有几十上百层每帧全量更新一次矩阵级联成本非常可观。后来自研引擎里的做法是让UI单独成树、单独更新不与3D场景混在同一棵树上。如果你在改现有引擎遇到UI卡顿但场景里物体不多先去查UI变换树的更新逻辑大概率有惊喜。3. 资源管理的三段生命周期导入、加载、卸载3.1 资源为什么不能随手new一个很多从业务开发转过来的同学一开始会问加载一个模型不就是读文件解析顶点吗为什么要搞这么复杂原因是游戏资源跟普通文件不一样它要经过一个离线导入阶段把美术做出来的FBX、PSD、WAV变成引擎运行时能直接吃的东西网格转成顶点缓冲格式纹理压缩成GPU可以直接采样的BC/ETC/ASTC音频转成目标平台的压缩格式。这个阶段在编辑器里完成不是玩家运行时该干的事。运行时的加载也远不是fread就完事。一份资源可能同时被多个对象引用同一个材质被一百个地面碎片引用如果每引用一次就加载一份拷贝显存和内存瞬间爆炸。所以运行时资源加载第一步就是做去重也就是资源表/ResourceCache先查表命中就直接返回同一份实例并给引用计数加一。这张表一般以资源ID或GUID为key底层是哈希表。3.2 加载管线里的同步与异步聊聊加载卡顿同步加载很好理解主线程发一个IO请求等文件读进内存、解析完、上传GPU完成才返回。这在阻塞画面时最简单但代价是卡顿。一个几百MB的大关卡同步加载能让你看几十秒黑屏这在移动端几乎是不可接受的事故。所以现在引擎普遍支持异步加载。完整流程是主线程发起异步请求拿到一个任务句柄IO线程读文件可能还要叠加解压和解密后台线程解析文件格式反序列化出资源结构注意这一步未必能在后台线程做因为很多引擎资源对象依赖主线程的分配器资源对象完成后切回主线程执行回调如果有GPU上传纹理、网格此时才真正占用显存带宽。这里的关键权衡是哪些步骤能在工作线程做哪些必须回主线程。我的经验是凡是涉及引擎内部对象管理器、事件分发、脚本回调的步骤一律回主线程纯数据转换顶点重排、格式转换、解压可以放后台。同时要控制并发加载数别一次性把50个文件同时发出去磁盘本身吃不消IO队列乱成一团反而比逐个加载更慢。一般做法是维护一个加载队列按优先级调度同时进行中的IO任务控制在2到4个具体数字取决于目标平台磁盘速度。3.3 卸载的学问引用计数、常驻资源和失联资源加载是加法卸载是减法减法远比加法难。最常见的卸载策略是引用计数资源被引用时加一释放引用时减一归零就从缓存里移除并释放显存和内存。这套机制最大的问题是谁持有引用却数不清。现实场景里经常看到某个角色Prefab被实例化一万次后场景里的对象删光了但因为某些脚本在Awake时持有了资源引用永远不放计数永远不为零资源就一直驻留。更麻烦的是资源之间的互相引用A引用BB引用A两边都认为对方还活着形成循环引用人工清理很难发现。所以工业级引擎一般在引用计数之上再叠一个资源泄漏检测兜底定期扫描所有已加载资源如果一定时间内没有被任何对象实际引用且不是常驻资源就强制回收并打一条警告日志。常驻资源Resident Asset要单独标记比如全局都要用的Shader、字体、基础材质、UI贴图在场景切换时不应该被卸载。我给团队定的规矩是常驻资源列表必须人工维护每周检查一次有没有新增的偷偷变成常驻的资源。因为只要漏标一个常驻性能不会立刻出问题但场景切换后你会看到大面积紫红色错误贴图那就是贴图没加载回来。这个坑排查起来很费时间不如提前把常驻列表管好。4. 资源句柄与依赖图绕开悬垂指针的那点事4.1 为什么要给资源发明身份证直接拿指针当资源引用是最快的也是隐患最大的。异步加载场景下你发起加载后顺手把指针塞给别处等加载完成时那个指针指向的内存可能已经被卸载或替换了就成了悬垂指针。所以现代引擎普遍用句柄Handle代替指针句柄是一个ID访问时要先通过这个ID查一次资源表才能拿到真正的资源指针。句柄通常是一个64位整数高位是资源类型或GUID的一部分低位是资源在表里的索引和世代号。世代号是关键设计同一索引位置的资源被卸载再被新资源占住时世代号会递增旧的句柄因为世代号不匹配访问时直接判定无效而不是拿到一个看起来差不多的错误资源。这一步能把很多异步竞态问题从偶发崩溃变成稳定报错调试起来轻松一个量级。4.2 资源依赖图与加载顺序资源不是孤岛。材质依赖贴图模型依赖材质和骨架Prefab依赖模型、脚本、音频场景依赖一大堆Prefab。如果把加载看成图的遍历那必须先加载依赖项再加载被依赖方。实际实现里引擎会在构建阶段就生成一份资源依赖表运行时按依赖关系做拓扑排序保证加载顺序正确。我在一个项目里亲眼见过反向案例某个角色Prefab一加载就崩查了半天发现是它依赖的动画状态机还没加载完加载器却已经开始尝试绑定骨骼动画了。后来给资源加载器加了一个依赖未就绪则等待的机制并且把该资源的所有依赖项也一并作为加载任务提交。实现上并不复杂核心是每个资源维护一个依赖完成计数所有依赖项完成后再触发该资源自己的完成回调。有了这个机制哪怕美术在编辑器里乱拖资源引用运行时也不会因为顺序问题炸掉。4.3 实际项目里泄漏与悬垂的高发场景整理了这几年排查的案例资源问题基本集中在几个固定场景场景物体持有场景外的资源引用。比如一个炸弹出场时动态加载爆炸特效特效是独立资源但物体的释放逻辑只清理了AI组件没有释放特效引用导致每次爆炸都新增一份特效资源驻留。回调闭包持有资源句柄不释放。异步加载完成后把资源塞进一个静态事件事件对象从不反注册句柄一直有效但无人使用资源自然驻留。同一资源被不同模块各自加载但只有一边释放。这就是统一资源管理器存在的意义所有模块必须统一从管理器申请资源禁止直接new资源对象。排查手段的优先级我是这么排的第一看资源管理器自带的引用统计表找引用数异常的资源第二对比两次场景切换前后的资源快照看哪些资源进来了就再也出不去第三用内存分析工具看重复实例。老实说大多数资源泄漏不是内存分析工具直接查出来的而是引用统计表先暴露了这个资源明明没人用了引用数却是3顺着引用计数反查才发现是某处回调泄漏。所以给资源管理器加引用统计报表越早越好别等功能全做完了再补。5. 流式加载与大世界资源管理最难的那一关5.1 大世界为什么不能加载整个场景开放世界、超级大地图之所以是资源管理的地狱是因为整个场景根本装不进内存也不能让玩家站在海边就把全地图的贴图都载入显存。所以做法是把世界切成加载块Chunk/Streaming Cell玩家附近的块加载远距离的块卸载中间距离的只加载低精度版本这就是流式加载。流式加载的调度是核心问题。一个朴素的方案是按距离玩家半径1公里内的块全部加载1到2公里内只加载碰撞和低模2公里外完全不处理。但真实世界还有山体遮挡只看距离会浪费大量加载带宽去穿山加载。工程上一般会引入细粒度Cell加可见性检测加优先级队列把高优先级但暂时用不上和低优先级但马上要用区分开。加载带宽是有上限的流式系统本质上是一个带优先级的IO调度器而不是单纯的文件加载器。5.2 纹理流式与显存预算的取舍大世界里纹理的消耗最恐怖。一块草皮贴图近处要看高清细节远处看它就是一小块模糊色斑这时不必加载完整mip链。纹理流式Texture Streaming就是只保留当前需要的那几级mipmap视距变化时再补加载更高级别。不过纹理流式有两大代价一是GPU格式的纹理上传速度并不快ASTC和BC这类压缩格式的上传带宽也有限频繁补更高级别会造成视觉上糊了再变清晰的闪烁二是需求变化太快玩家转头速度比加载速度快会出现贴图闪烁。工程解法是对关键资源预加载全mip链对动态进入视线的资源给一段缓冲期并限制每分钟上传纹理的预算宁可模糊也不要闪。这块经验说到底就一句话流畅感优先于清晰度玩家能容忍半秒模糊但容忍不了画面一直闪。5.3 移动端内存预算表一份实用的配置参考流式加载的最终落脚点是内存预算。给一份可以抄作业的参考表背景设定是某中端移动设备游戏进程可用内存约800MB到1GB资源类别预算占比备注纹理含流式45%~55%最大开销靠mip流式压缩网格/骨骼10%~15%优先压顶点数少用高模音频常驻流式5%~8%大音频走文件流式动画5%~8%压缩曲线和骨骼动画Shader与材质3%~5%尽量少动态合批和合材场景对象与逻辑数据10%~15%实体、组件、脚本堆加载系统自身2%~3%IO缓冲、加载队列这张表不是死的但它强迫你回答一个问题纹理超了是砍贴图分辨率还是砍常驻块数量大多数项目死在每个模块都觉得自己只占一点加起来直接爆掉。我见过最有效的做法是每星期跑一次全场景资源统计自动比对预算表超预算的部分直接进周会评审。工具本身不复杂关键是规则要坚决不然预算表就是一纸空文。做了这么多年引擎我对游戏对象和资源管理最大的体会是这不是两个独立主题而是一枚硬币的两面。对象是资源的消费者资源是对象的供给方。对象体系设计得再优雅资源加载没跟上玩家看到的就是转圈、卡顿、紫红色贴图资源体系做得再健壮对象生命周期一团糟泄漏照样吃光内存。最后分享一个我从第一个项目踩坑踩到现在的小技巧让对象销毁和资源释放在代码层面强制对称。我坚持在每个动态创建对象的模块里紧挨着创建函数写销毁函数并让销毁函数自动释放这个对象创建时申请的所有资源句柄。这个习惯坚持一年之后项目里的资源泄漏数量下降了八成以上。架构很多时候不是一次设计出来的是靠这些琐碎的纪律一天天熬出来的。希望这篇能帮你在自研或改引擎的路上少走几个弯路。

相关新闻

Java工程师转型Agent工程师:24周工程化实战路线

Java工程师转型Agent工程师:24周工程化实战路线

聊到 Agent Engineer(智能体工程师),最近身边的 Java 后端朋友说得越来越频繁。这个岗位热度上来了之后,最大的误判是:大家都觉得只有写 Python、搞机器学习的人才有资格进场。我前后接触过不少 Agent 项目的交付&…

2026/10/13 10:57:56 阅读更多 →
计算机专业毕业设计选题指南:三大黄金原则与避坑技巧

计算机专业毕业设计选题指南:三大黄金原则与避坑技巧

1. 计算机专业毕业设计选题的现状与痛点每年毕业季,计算机专业的学生们都会面临一个共同的难题——毕业设计选题。作为过来人,我见过太多同学在这个环节栽跟头。有的选题过于宏大,最后无法完成;有的选题过于简单,答辩时…

2026/10/13 10:57:56 阅读更多 →
CC Switch:Claude Code多模型配置切换的最佳实践

CC Switch:Claude Code多模型配置切换的最佳实践

1. 先搞清楚:Claude Code 的配置到底存在哪1.1 settings.json 和 .claude 目录的配置逻辑用过 Claude Code 一段时间的朋友应该都有感触:这个工具好用是好用,但配置逻辑和普通 IDE 完全不是一回事。它不搞"设置面板"那一套&#xf…

2026/10/13 10:57:56 阅读更多 →

最新新闻

AI助手会话记录批量导出实战:从API到浏览器脚本的完整方案

AI助手会话记录批量导出实战:从API到浏览器脚本的完整方案

1. 把需求掰开揉碎:你要的批量导出到底是什么时不时就有人来问:能不能把AI助手左侧那一长串会话记录一次性导出?注意,这里的“会话”指的是左边列表里的每一个独立条目,而不是某个会话里的几十轮来回。每条会话都有自己…

2026/10/13 11:39:13 阅读更多 →
OneLive私有化直播系统搭建全攻略:从推流到播放的完整实践

OneLive私有化直播系统搭建全攻略:从推流到播放的完整实践

第一次把 OneLive 这个名字写在架构图上,是在帮一个朋友做线上分享活动的时候。他当时需要的不是某个直播平台的账号,而是一套能装在自有服务器上、由自己完全控制推拉流、录制和权限的直播项目。OneLive 这个名字就这么随手起了:一场直播、一…

2026/10/13 11:39:13 阅读更多 →
Open Code Review:从形式评审到协作基础设施的范式升级

Open Code Review:从形式评审到协作基础设施的范式升级

1. “open-code-review”不是个工具,而是一套被低估的协作范式你有没有遇到过这样的场景:团队里新来一位同事,第一天就提了三份PR,每份都改了二十多个文件,commit message写的是“fix bug”;或者自己花三天…

2026/10/13 11:39:13 阅读更多 →
基于人脸识别的照片视频管理器:C#稳定版64位实现

基于人脸识别的照片视频管理器:C#稳定版64位实现

简介:这是一款用C#编写的本地照片与视频管理工具,面向需要按人物整理个人影像资料的普通用户与开发者。它支持jpg、jpeg、png、bmp等图片格式以及avi、mp4、mpg、mpeg等视频格式,核心能力包括人脸库录入、照片视频人脸自动识别,以…

2026/10/13 11:39:13 阅读更多 →
AI编程智能体分级:决策权归属决定项目成败

AI编程智能体分级:决策权归属决定项目成败

1. 为什么“智能体分级”不是技术炫技,而是项目落地的生死线最近帮某高校实验室做一套教学辅助系统时,团队最初信心满满:用最新开源大模型Agent框架,两周就能跑通自动出题、批改、反馈闭环。结果卡在第三天——学生提交一道开放性…

2026/10/13 11:39:13 阅读更多 →
大模型与电机控制之间:三层分布式架构的工业落地实践

大模型与电机控制之间:三层分布式架构的工业落地实践

1. 从“一句话控制电机”的幻觉说起这两年大模型火得不行,不少做工业自动化的朋友私下问我:既然大模型连代码都能写,能不能让它直接控制电机?把产线上的PLC换掉,用自然语言让机械臂干这干那,听起来实在太有…

2026/10/13 11:38:11 阅读更多 →

日新闻

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

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

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

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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →