Unity Addressable远程热更:从构建到CDN部署的避坑指南
1. 项目概述为什么Addressable远程热更值得投入在Unity项目开发的中后期尤其是上线运营阶段资源管理会从一个“开发问题”演变成一个“运维噩梦”。想象一下你的游戏上线后发现一个UI图标错误或者一个活动场景存在BUG。如果这个资源被打包在安装包里传统方式下你需要重新打包整个应用提交给各个渠道审核用户再下载几百兆甚至几个G的更新包——这个过程动辄几天用户流失率会高得吓人。这就是远程资源热更新Hot Update的核心价值它允许你将资源如图片、预制体、场景、配置表放在云端服务器上游戏运行时动态下载实现快速、静默的修复与内容更新无需用户重新安装应用。Addressable Asset System可寻址资源系统是Unity官方推出的新一代资源管理方案它正是为了解决上述痛点而生。它不仅仅是“另一个AssetBundle系统”而是一个以“地址Address”为核心概念的完整资源生命周期管理框架。你可以把每个资源比如一把武器的模型Assets/Prefabs/Weapons/Sword.prefab赋予一个唯一的、人类可读的地址比如Weapon_Sword_01。在代码中你只需要通过这个地址去加载资源而完全不用关心这个资源当前是在本地、在远程、被打包进了哪个AssetBundle、甚至它的具体路径是什么。Addressable系统会自动帮你处理依赖、加载、缓存和更新。然而从本地的Build到顺畅的远程CDN部署这条路看似清晰实则布满了“坑”。我见过不少团队兴致勃勃地接入Addressable却在打包、部署、加载的环节接连翻车轻则资源加载失败重则线上事故。这篇文章我将结合多个项目的实战经验为你拆解从构建到上线的全流程重点不是告诉你“怎么做”而是告诉你“为什么这么做”以及“怎么避开那些常见的坑”。2. 核心概念与前期设计避坑在动手敲第一行配置之前理清几个核心概念和设计决策能避免你后期推倒重来。2.1 资源分组策略粒度与依赖的博弈资源分组Group是Addressable管理的核心单元每个组在构建时会生成一个或多个AssetBundle。分组策略直接影响到包体大小、加载速度和热更粒度。常见的错误策略一个资源一个组这会导致产生海量的小AssetBundle文件。虽然热更粒度最细但会引发“HTTP请求风暴”严重拖慢初始加载速度并且CDN边缘节点缓存效率极低。所有资源一个组任何微小改动都需要用户重新下载整个巨大的资源包完全失去了热更的意义。按类型分组比如所有UI图片一个组所有模型一个组。这看起来合理但忽略了资源间的依赖关系。例如一个UI界面预制体在UI组依赖一个图集也在UI组和一个角色头像在角色组。如果只更新了角色组但由于依赖关系UI组可能也需要连带更新或引发运行时错误。推荐的策略是“按功能模块和更新频率”进行分层分组基础包组Built-in包含游戏启动必须的、几乎永远不会变的资源如核心框架代码、初始登录界面UI。这部分资源在构建时选择“Build to Local”模式直接打进应用安装包确保玩家在无网络时也能启动游戏。功能模块组按游戏功能划分如“登录模块”、“主城模块”、“副本A模块”、“英雄系统模块”。每个模块内的资源预制体、场景、专属美术资源尽量放在一个或少数几个组里。这样更新一个功能时只需要更新对应的组。共享资源组被多个模块频繁使用的公共资源如通用UI组件、字体、音效、Shader。将这些资源独立分组。更新时需谨慎因为改动会影响所有依赖它的模块。配置数据组如Excel/JSON配置表。这类资源体积小、变更频繁可以单独分组甚至每个配置表一个组实现极细粒度的热更。实操心得在Addressable Groups窗口多使用“Analyze”工具下的“Check Bundle Duplicate Dependencies”和“Check Resources to Built-in Scenes”来分析依赖关系优化分组。一个基本原则是让高频同时加载的资源在一起让低频变更的资源分开。2.2 构建模式详解Local vs Remote这是第一个关键选择决定了资源的存放位置。Local本地构建资源会被构建到[ProjectRoot]/Library/com.unity.addressables/aa/[Platform]目录下并随应用打包如APK/IPA一起发布。适用于上述的“基础包组”。Remote远程构建资源会被构建到你指定的本地目录如ServerData但不会打进应用包。你需要手动或通过脚本将这些构建输出文件.bundle文件、哈希文件、目录文件上传到你的CDN或Web服务器。游戏运行时Addressable系统会根据配置的远程加载路径URL去下载这些资源。最大的坑在于混合使用时的路径配置。当你同时有Local和Remote组时Addressable会生成一个名为catalog.json或带哈希的catalog_xxx.json的目录文件。这个文件记录了所有资源的地址、依赖关系和加载路径。对于Remote资源其加载路径是在构建时根据你在Addressable Asset Settings中设置的Remote Load Path生成的绝对或相对路径。例如你设置Remote Load Path为http://your-cdn.com/[BuildTarget]。那么构建后catalog.json里记录的某个远程资源的路径可能就是http://your-cdn.com/StandaloneWindows64/groupname.bundle。如果你在构建后将文件上传到了CDN的不同目录结构下比如你上传到了http://your-cdn.com/v1.0.0/StandaloneWindows64/那么这个路径就对不上了导致加载失败。避坑指南建议将Remote Load Path设置为一个相对路径的模板如{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]。然后在运行时通过代码动态设置Addressables.RuntimePath为你的CDN基础URL。这样构建产物内的路径是相对的灵活性更高。// 在游戏初始化时根据版本号等设置运行时路径 Addressables.RuntimePath https://your-cdn.com/remote-assets/v version; // 然后再初始化Addressables await Addressables.InitializeAsync();3. 构建Build流程详解与参数调优构建不是简单点一下按钮里面的参数配置直接影响产出物的正确性和性能。3.1 构建脚本与参数解析通常我们不直接点击编辑器菜单构建而是使用脚本进行自动化构建便于集成到CI/CD持续集成/部署流水线中。using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Settings; using System.Threading.Tasks; public static class AddressableBuilder { public static async Task BuildAddressables() { // 获取默认设置 AddressableAssetSettings settings AddressableAssetSettingsDefaultObject.Settings; if (settings null) { UnityEngine.Debug.LogError(Addressable Asset Settings not found.); return; } // 设置激活的构建模式例如打远程包时 // settings.ActivePlayerDataBuilderIndex 找到你配置的远程构建脚本的索引 // 关键清理之前的构建缓存避免残留旧文件干扰 AddressableAssetSettings.CleanPlayerContent(settings.ActivePlayerDataBuilder); // 开始构建 AddressableAssetSettings.BuildPlayerContent(); // 或者使用异步构建避免编辑器卡死 // AddressableAssetSettings.BuildPlayerContentAsync().WaitForCompletion(); } }核心构建参数在Addressable Asset Settings中Build Load Paths:Local Build Path本地构建产物的输出目录在项目内。Remote Load Path运行时加载远程资源的根URL模板。这是最容易出错的地方。Build Settings:Compress BundlesAssetBundle压缩格式。LZ4在打包速度和加载速度间取得平衡且支持流式加载无需完全解压即可读取部分内容是远程资源的首选。LZMA压缩比最高但需要完全解压才能使用适合本地Built-in资源。不要对远程资源使用LZMA否则下载后解压会卡顿。Build Addressables on Player Build勾选后在构建Player如exe/apk时会自动触发Addressables构建。对于需要分离本地和远程包的分组策略建议取消勾选使用脚本分别构建。Ignore Invalid/Unsupported Files in Build务必勾选避免因为一些编辑器临时文件导致构建失败。3.2 构建产物分析与上传准备执行一次远程构建后查看输出目录如ServerData你会看到类似如下的结构ServerData/ ├── StandaloneWindows64/ # 构建目标平台 │ ├── catalog.json # 主目录文件可能带哈希 │ ├── settings.json # 构建设置信息 │ └── group1_123abc.bundle # 资源包文件 │ └── group1_123abc.hash # 资源包的哈希文件用于增量更新 ├── Android/ ├── iOS/ └── ...必须上传到CDN的文件整个平台文件夹如StandaloneWindows64下的所有文件。特别要注意catalog.json和每个.bundle对应的.hash文件必须一并上传这是增量更新Content Update功能所依赖的。常见坑点坑1忘记上传.hash文件。导致客户端无法进行增量比对每次更新都只能全量重新下载对应的Bundle。坑2CDN目录结构与构建路径不匹配。如前所述确保运行时Addressables.RuntimePathcatalog.json内记录的相对路径能正确拼接成资源的完整URL。坑3构建后直接覆盖了CDN上的旧文件。在游戏运行时这可能造成正在下载的资源文件被更改或删除引发不可预知的加载错误。正确的做法是将新构建的产物上传到一个全新的版本化目录如/v1.0.1/然后通过更新catalog.json的指向或通过服务器下发新的资源列表来引导客户端切换。4. 部署CDN与运行时加载避坑将资源上传到CDN只是第一步如何让客户端正确、高效、稳定地加载才是关键。4.1 CDN配置与最佳实践启用HTTPS现代应用商店如Apple App Store强制要求网络请求使用HTTPS。确保你的CDN支持并正确配置了SSL证书。配置正确的MIME类型确保CDN服务器能为.bundle文件返回正确的MIME类型如application/octet-stream。错误的MIME类型可能导致客户端下载失败或无法识别。缓存策略对于catalog.json文件可以设置较短的缓存时间如5-10分钟或使用no-cache头以便客户端能及时检查到更新。对于具体的资源Bundle文件.bundle可以设置非常长的缓存时间如一年并配合使用“内容哈希”作为文件名的一部分。因为一旦文件内容变化其哈希值就会变文件名也就变了相当于一个新的URL不会受到旧缓存的影响。Addressable的构建输出已经帮我们做到了这一点文件名包含哈希值。跨域问题CORS如果你的游戏是WebGL平台从CDN加载资源时会遇到跨域问题。你需要在CDN配置中为资源响应头添加Access-Control-Allow-Origin: *或指定你的域名。4.2 运行时初始化与加载游戏启动时Addressable需要初始化加载catalog.json来了解资源分布。using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using System.Threading.Tasks; public class ResourceManager : MonoBehaviour { public string remoteBasePath https://your-cdn.com/remote-assets/v1.0.0; async void Start() { // 1. 设置运行时路径关键步骤 Addressables.RuntimePath remoteBasePath; // 2. 异步初始化 AsyncOperationHandle initHandle Addressables.InitializeAsync(); await initHandle.Task; if (initHandle.Status AsyncOperationStatus.Succeeded) { Debug.Log(Addressables 初始化成功); // 3. 可选检查内容更新 await CheckForContentUpdate(); } else { Debug.LogError($Addressables 初始化失败: {initHandle.OperationException}); } } async Task CheckForContentUpdate() { // 此方法会对比本地和远程的catalog返回需要更新的资源大小 AsyncOperationHandleListstring checkHandle Addressables.CheckForCatalogUpdates(false); await checkHandle.Task; Liststring catalogsToUpdate checkHandle.Result; if (catalogsToUpdate ! null catalogsToUpdate.Count 0) { Debug.Log($发现 {catalogsToUpdate.Count} 个目录需要更新); // 执行更新 AsyncOperationHandleListIResourceLocator updateHandle Addressables.UpdateCatalogs(catalogsToUpdate, false); await updateHandle.Task; Debug.Log(内容更新完成); } Addressables.Release(checkHandle); } }加载资源的几种方式及选择Addressables.LoadAssetAsyncT(address)最常用的异步加载单个资源。务必妥善管理返回的AsyncOperationHandle用完后调用Addressables.Release(handle)来释放引用计数防止内存泄漏。Addressables.InstantiateAsync(address)异步加载并实例化一个GameObject如预制体。同样需要管理其AsyncOperationHandle实例销毁时最好调用Addressables.ReleaseInstance(gameObject)。Addressables.LoadSceneAsync(address, LoadSceneMode.Additive)异步加载场景。重大避坑点内存泄漏。Addressable使用引用计数来管理资源生命周期。如果你只Load而不Release或者Instantiate后直接Destroy而不调用ReleaseInstance那么资源会一直留在内存中造成泄漏。建议为每个需要加载的资源编写封装方法统一管理Handle。4.3 内容更新增量更新流程这是远程热更的精髓。你修改了几个美术资源不需要用户重新下载所有东西。开发端在修改资源后不要进行完整的“Clean Build”。而是使用Addressables提供的“Update a Previous Build”功能。这个功能会比较当前资源状态与上次构建的目录。只重新构建那些内容发生变化的组以及依赖这些组的所有其他组。生成一个新的catalog.json和新的或修改过的.bundle文件。关键它会保留未修改组的.bundle和.hash文件不变。部署端将本次构建产出的所有新文件新的catalog.json、新的或修改过的.bundle及其.hash上传到CDN与旧文件共存。注意不要删除旧文件因为可能还有旧版本客户端在使用。客户端如上节代码所示通过CheckForCatalogUpdates和UpdateCatalogs客户端会自动下载新的catalog.json并比对新旧目录只下载那些有变化的.bundle文件实现增量更新。5. 疑难杂症排查与性能优化5.1 常见问题速查表问题现象可能原因排查步骤与解决方案加载失败报错InvalidKeyException1. 地址字符串拼写错误。2. 该地址对应的资源未被标记为Addressable。3. 资源所在的组构建失败或未构建。1. 检查代码中的地址字符串。2. 在Addressables Groups窗口搜索该地址确认资源存在且地址正确。3. 检查该资源所在组的构建状态尝试重新构建该组。远程资源加载超时或失败1. 网络问题。2.Remote Load Path或RuntimePath配置错误URL无法访问。3. CDN未配置正确的MIME类型或CORS。4. 资源文件未成功上传到CDN指定路径。1. 检查网络连接。2. 在浏览器或Postman中直接尝试拼接出的完整资源URL看是否能下载。3. 检查CDN配置确保.bundle文件可被正确下载。4. 核对CDN文件列表与本地构建输出是否一致。加载时卡住或回调不执行1. 异步操作未正确等待await/Task或协程yield return。2. 资源依赖项加载失败。3. 主线程阻塞。1. 确保使用await handle.Task或yield return handle等待加载完成。2. 查看更详细的日志确认是否是某个依赖资源出错。3. 检查是否在加载回调中执行了耗时同步操作。更新后旧资源依然被加载1. 客户端缓存了旧的catalog.json。2. 增量更新未成功客户端未下载新的Bundle。3. 代码中使用了错误的、硬编码的地址或加载方式。1. 强制关闭应用重启或清除Addressables的持久化缓存Caching.ClearCache()。2. 检查更新流程日志确认UpdateCatalogs是否成功下载了新文件。3. 确保资源地址是动态管理的避免直接使用可能过时的路径。内存占用过高1. 加载的资源未释放Addressables.Release。2. 频繁实例化/销毁未使用对象池。3. 同时加载了过多大型资源。1. 使用Profiler的Addressables模块查看资源引用情况确保每个Load都有对应的Release。2. 对频繁创建销毁的对象如子弹、特效使用Addressables自带的或自定义的对象池。3. 实现分帧加载、按需加载机制。5.2 性能优化建议并发加载与限流Addressable默认会有一些并发请求限制。你可以通过Addressables.ResourceManager.WebRequestOverride来自定义UnityWebRequest设置超时、重试策略甚至实现一个优先级队列来管理加载请求避免瞬间发起过多请求拖慢整体速度或触发CDN限流。预加载关键资源在加载场景或进入新功能前提前异步加载可能用到的关键资源包使用Addressables.DownloadDependenciesAsync可以显著减少进入时的卡顿。缓存策略Addressable会自动缓存下载的远程资源到本地持久化存储。理解并合理配置缓存大小和过期策略。对于确定会频繁更新的小资源如配置表可以考虑适当缩短缓存时间或主动清理。资源清理除了使用Release还可以在场景切换等时机调用Addressables.CleanBundleCache或根据标签释放一组资源及时回收内存。监控与日志在开发阶段打开Addressables的详细日志Addressables.LogResourceManagerExceptions。在线上可以收集资源加载的成功率、耗时、CDN下载速度等指标以便及时发现网络或资源问题。从构建到部署Addressable远程热更是一套强大的体系但它的强大也伴随着复杂性。核心在于理解其“以地址为中心”的设计哲学以及“目录Catalog驱动”的更新机制。每一步配置都关乎最终效果希望这份避坑指南能帮助你更平稳地驾驭这套系统让资源热真正成为你项目敏捷迭代的助推器而不是深夜加班的事故来源。在实际项目中建议搭建一个从本地构建、自动上传到CDN、再到客户端检测更新的完整沙盒测试流程充分验证后再全量上线。

相关新闻

多功能 AI 办公助手使用观察,多款智能工具能力边界整理

多功能 AI 办公助手使用观察,多款智能工具能力边界整理

日常内容创作、办公提效、代码开发、智能设计工作中,全能型AI助手的使用场景愈发广泛。不同AI智能工具在功能覆盖、运行模式、跨端适配、场景适配性上存在明显区别。下文客观记录五款AI助手工具的基础能力与使用局限,本文无任何商业合作,不区…

2026/10/10 2:05:59 阅读更多 →
vLLM与PagedAttention:大模型KV缓存优化与生产部署实战

vLLM与PagedAttention:大模型KV缓存优化与生产部署实战

如果你曾经尝试过在生产环境部署大语言模型,大概率会遇到这样的场景:模型推理速度时快时慢,显存占用像过山车一样波动,并发请求稍多就出现OOM(内存溢出)。这些问题的根源,往往不在于模型本身的计…

2026/10/8 8:41:44 阅读更多 →
Python pip install git+ 详解:从Git仓库直接安装包的原理与实践

Python pip install git+ 详解:从Git仓库直接安装包的原理与实践

1. 项目概述:当 pip 遇见 Git如果你写过 Python 项目,肯定对pip install package-name这个命令熟悉得不能再熟悉了。它从 PyPI(Python Package Index)这个“官方应用商店”里,把别人打包好的轮子(wheel&…

2026/10/3 8:18:28 阅读更多 →

最新新闻

GitHub热门项目分析方法论:从真实数据看技术趋势

GitHub热门项目分析方法论:从真实数据看技术趋势

我无法基于“🚀 2026 年 9 月 GitHub 十大热门项目排行榜 🔥”这一标题生成符合要求的高质量博文。原因如下:时间悖论:当前真实时间为2024年,标题中明确指向“2026年9月”,属于尚未发生的未来时间点。GitHu…

2026/10/12 10:45:45 阅读更多 →
Python报错ModuleNotFoundError: No module named ‘twine‘的彻底解决指南

Python报错ModuleNotFoundError: No module named ‘twine‘的彻底解决指南

1. 报错背后的真相:先弄明白twine是什么1.1 为什么pip安装过程中会报这个错先说结论:这个报错翻译成人话就是,你当前Python环境里根本找不到一个叫twine的模块,或者找错了环境。twine这个工具在Python生态里的定位很特殊。如果用生…

2026/10/12 10:45:44 阅读更多 →
医疗SPD供应链管理:从缘起到四方协作的落地实践与避坑指南

医疗SPD供应链管理:从缘起到四方协作的落地实践与避坑指南

1. 从“缘起”说起:SPD到底是个什么局第一次听到SPD这个词,很多人的反应是“这不是医院里那个耗材管理的东西吗”,也有人会想到供应链里的某个缩写。没错,SPD在不同行业里有不同的含义,但今天我要聊的,是它…

2026/10/12 10:45:44 阅读更多 →
纯NumPy手写数字识别毕设系统:含SQL登录与全流程工程实践

纯NumPy手写数字识别毕设系统:含SQL登录与全流程工程实践

简介:本资源是一套基于Python与深度神经网络实现的手写数字识别系统,面向计算机专业本科生及人工智能初学者,适用于毕业设计、课程设计等实践场景,解决手写数字图像自动识别这一经典机器学习任务。压缩包共18个文件,包…

2026/10/12 10:45:44 阅读更多 →
真实案例:requests抓不到JS渲染页面?Selenium高级爬虫实战指南

真实案例:requests抓不到JS渲染页面?Selenium高级爬虫实战指南

一次真实案例引发的思考&#xff1a;requests 正常返回&#xff0c;页面却啥都没有去年我做新闻舆情监控&#xff0c;目标站点的文章列表页用 requests 抓回来&#xff0c;HTML 里干干净净&#xff0c;只有一堆<script src"/assets/index.js?v20240312">。可浏…

2026/10/12 10:45:44 阅读更多 →
【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?TaoToken 统一 Key 通道的接入视角

【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?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 10:44:39 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

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