Unity中Spine动画完整工作流:从导入到性能优化
1. 项目概述为什么Unity开发者需要掌握Spine动画如果你正在用Unity开发2D游戏尤其是横版过关、卡牌对战或者需要大量角色表演的项目那么Spine动画工具你大概率绕不开。我见过太多团队美术用Spine做出了流畅酷炫的角色动画结果在导入Unity后程序这边要么播不出来要么性能卡顿要么换装穿帮最后美术和程序互相“甩锅”项目进度严重受阻。这个“完整指南”就是来解决这些实际痛点的。它不仅仅是一个插件使用的说明书而是一套从资源导入、组件配置、代码控制到性能优化的完整工作流总结目标就是让你能顺畅地把美术同事精心制作的Spine动画在Unity里完美地“动”起来并且动得高效、可控。Spine本身是一个专注于2D骨骼动画的创作软件它的优势在于动画数据量小、支持网格变形和自由变形FFD能做出非常细腻的动画效果。而spine-unity运行时就是连接Spine创作端和Unity引擎端的桥梁。理解这一点很重要你在Unity里操作的不再是传统的序列帧纹理而是一套由骨骼、插槽、附件和动画数据构成的动态结构。这意味着你的开发思维需要从“切换图片”转变为“操控骨骼与皮肤”。接下来我会拆解整个流程中的核心环节和那些容易踩坑的细节。2. 核心工作流与资源导入解析2.1 运行时的安装与项目初始化首先你需要获取spine-unity运行时。最规范的方式是从Spine官网下载最新的Unity包.unitypackage或者如果你在使用Unity的Package Manager可以添加其Git仓库URL。这里我强烈建议即使是个人项目也通过官方渠道获取避免使用来源不明的修改版这能从根本上避免后续奇怪的兼容性问题。导入包后你的项目Assets目录下会出现Spine和Spine Examples文件夹。我个人的习惯是先快速浏览一下Spine Examples中的场景特别是Getting Started和Mix and Match这能让你对最终效果有个直观感受。然后我会把Spine运行时核心文件夹整个保留但将Spine Examples移出项目或放入一个专门的_Samples目录防止和项目实际资源混淆。注意导入时Unity可能会提示一些关于API更新或过时方法的警告。请务必根据提示查看Spine官方文档或发行说明决定是否需要调整Unity版本或进行简单的脚本更新。忽略这些警告可能会在未来某个时刻导致运行时错误。2.2 Spine资源文件的正确导出与导入美术人员在Spine编辑器中完成动画制作后需要导出供Unity使用的数据。关键就在这里导出设置必须与Unity运行时要求匹配。通常导出的文件包括一个.json文件或.skel二进制文件和对应的图集文件。图集部分会生成两个文件一个.png纹理图集和一个.atlas图集描述文件。你需要将这组文件.json/.skel, .png, .atlas完整地复制到Unity项目的Assets目录下的某个文件夹中例如Assets/Art/SpineCharacters/Hero。将文件拖入Unity后引擎会自动识别并处理。你会看到Unity为这些资源创建了对应的导入对象.json/.skel文件会生成一个SkeletonDataAsset类型的资源。这是核心数据资产包含了骨骼结构、动画列表、皮肤信息等。.atlas文件会生成一个AtlasAsset类型的资源它关联了.png纹理并定义了每个碎片的UV信息。通常还会自动生成一个材质球Material使用Spine提供的Spine/Skeleton着色器。一个常见的坑是文件缺失或路径错误。务必确保.atlas文件中的图片路径指向是正确的相对路径。如果美术在Spine中重命名了图片或调整了图集但.atlas文件没有同步更新就会导致Unity中显示为紫红色丢失材质。此时你需要用文本编辑器打开.atlas文件检查其引用的图片文件名是否与实际的.png文件名完全一致。3. 场景搭建与核心组件详解3.1 SkeletonAnimation与SkeletonMecanim组件的选择在Unity场景中播放Spine动画主要依靠两个组件SkeletonAnimation和SkeletonMecanim。如何选择这取决于你的动画控制逻辑偏好。SkeletonAnimation是更直接、代码驱动的组件。你需要将生成的SkeletonDataAsset拖拽到它的Skeleton Data Asset字段上。它提供了最基础的API如skeletonAnimation.AnimationState.SetAnimation(trackIndex, animationName, loop)来播放动画。这种方式轻量、直接适合动画逻辑相对简单或者你希望用自己状态机管理的项目。你可以通过代码完全控制动画的播放、混合、轨道和事件。SkeletonMecanim则是为那些熟悉Unity Animator状态机系统的开发者准备的。它允许你将Spine动画绑定到Animator Controller的状态上利用Animator的过渡条件、混合树等强大功能来控制动画流程。这对于拥有复杂动画状态如 idle - walk - run - jump - attack的角色非常合适。你需要像设置普通Unity动画一样在Animator中创建状态并将Spine动画片段由SkeletonDataAsset生成拖入状态中。我的经验是对于小游戏或原型SkeletonAnimation更快捷对于中大型项目尤其是需要动画师参与状态机设计的情况SkeletonMecanim与Animator的整合能提供更好的工作流和可视化编辑能力。3.2 初始皮肤与骨骼配置组件挂载后Initial Skin和Animation Name是两个需要立即关注的属性。Initial Skin决定了角色初始穿戴哪一套皮肤。如果留空则会使用Spine编辑器中设置的默认皮肤。你可以在这里直接输入皮肤名称字符串也可以通过代码在运行时动态切换这对于角色换装系统是基础功能。Animation Name是组件初始化后自动播放的第一个动画通常设为“idle”。这里容易出错的是名称拼写必须完全一致包括大小写。我建议在代码中获取动画名称时使用SkeletonDataAsset的SkeletonData属性下的动画名称列表而不是硬编码字符串这样可以避免拼写错误。// 获取SkeletonDataAsset中所有动画名称的列表 SkeletonData skData skeletonDataAsset.GetSkeletonData(true); foreach (var anim in skData.Animations) { Debug.Log(anim.Name); }在Inspector中你还可以调整骨骼的初始缩放Initial Scale和渲染层级Sorting Layer/Order in Layer这对于2D游戏的层排序至关重要。4. 代码驱动动画控制实战4.1 基础动画播放与轨道控制使用SkeletonAnimation组件时动画控制的核心是AnimationState对象。最基本的播放操作如下public SkeletonAnimation skeletonAnimation; // 在Start或Awake中获取引用 // skeletonAnimation GetComponentSkeletonAnimation(); void PlayIdle() { // 在轨道0上播放“idle”动画循环播放 TrackEntry entry skeletonAnimation.AnimationState.SetAnimation(0, idle, true); // 你可以对返回的TrackEntry进行更多控制 entry.TimeScale 1.0f; // 播放速度 entry.MixDuration 0.2f; // 混合到该动画的过渡时间 }轨道Track的概念非常重要。你可以把轨道想象成动画层。轨道索引从0开始数字越大优先级越高上层。上层轨道的动画会覆盖下层轨道相同骨骼的动画。这常用于实现“上半身攻击下半身走路”的效果// 轨道0下半身走路 skeletonAnimation.AnimationState.SetAnimation(0, walk, true); // 轨道1上半身攻击优先级更高覆盖上半身骨骼的walk动画 TrackEntry attackEntry skeletonAnimation.AnimationState.SetAnimation(1, attack, false); // 攻击动画播放完后自动清空轨道1上半身恢复为walk动画 attackEntry.Complete delegate(TrackEntry trackEntry) { skeletonAnimation.AnimationState.ClearTrack(1); };4.2 动画事件与回调函数Spine动画可以在编辑器中添加事件Event在Unity中捕获这些事件是实现动画与游戏逻辑同步的关键比如在脚落地时播放音效在武器挥到最高点时进行伤害判定。首先在Spine编辑器中为动画帧添加事件点并命名如“footstep”, “hit”。 在Unity代码中你需要订阅AnimationState的事件void Start() { skeletonAnimation.AnimationState.Event HandleAnimationEvent; skeletonAnimation.AnimationState.Complete HandleAnimationComplete; } void HandleAnimationEvent(TrackEntry trackEntry, Spine.Event e) { if (e.Data.Name footstep) { // 播放脚步声 audioSource.PlayOneShot(footstepSound); } else if (e.Data.Name hit) { // 触发攻击检测 EnableHitBox(); } } void HandleAnimationComplete(TrackEntry trackEntry) { if (trackEntry.Animation.Name jump) { // 跳跃动画播放完毕切换为下落状态 ChangeToFallState(); } }这里有个细节Event回调的参数中的Spine.Event e包含事件数据而e.Data.Name才是你在编辑器里设置的事件名称。确保比较的是e.Data.Name而不是e.ToString()。4.3 皮肤与附件动态切换动态换装是Spine的一大亮点。皮肤Skin是一组附件Attachment如图片、网格的集合用于覆盖在骨骼上。切换整个皮肤public void ChangeSkin(string skinName) { var skeleton skeletonAnimation.Skeleton; var skin skeleton.Data.FindSkin(skinName); // 从数据中查找皮肤 if (skin ! null) { skeleton.SetSkin(skin); skeleton.SetSlotsToSetupPose(); // 关键切换皮肤后需要重置插槽姿势 skeletonAnimation.Update(0); // 立即更新一次以应用变化 } }更精细的附件替换比如只换武器public void ChangeWeapon(string slotName, string attachmentName) { var skeleton skeletonAnimation.Skeleton; int slotIndex skeleton.Data.FindSlot(slotName).Index; // 获取当前皮肤如果没有则使用默认皮肤 Skin skin skeleton.Skin ?? skeleton.Data.DefaultSkin; // 查找新附件 Attachment newAttachment skeleton.GetAttachment(slotIndex, attachmentName); if (newAttachment ! null) { // 设置附件到该插槽 skeleton.SetAttachment(slotName, attachmentName); } }重要提示SetSkin和SetAttachment操作后必须调用skeleton.SetSlotsToSetupPose()否则更换的皮肤或附件可能不会立即正确显示。这是因为Spine需要根据新附件重新计算插槽的绘制顺序和状态。5. 高级功能与性能优化策略5.1 动画混合与过渡平滑处理生硬的动画切换会显得非常不自然。Spine提供了强大的动画混合Mixing功能。你可以在播放新动画时设置一个混合时间Mix Duration让骨骼从旧姿势平滑过渡到新姿势。// 设置从“walk”动画过渡到“run”动画的混合时间为0.1秒 skeletonAnimation.AnimationState.Data.SetMix(walk, run, 0.1f); // 也可以设置默认混合时间 skeletonAnimation.state.Data.DefaultMix 0.1f;混合时间需要根据动画特性微调。快速转身、攻击起手等动作可能需要较短的混合时间0.05-0.1s而悠闲的站立到坐下则可能需要更长0.3-0.5s。切忌对所有动画使用相同的混合时间这会导致动作“黏连”或“滑动”感。5.2 渲染合批与Draw Call优化Spine角色的渲染性能很大程度上取决于Draw Call的数量。每个使用不同材质球Material的Spine渲染部件都会产生一个Draw Call。优化核心在于减少材质球的数量。共用图集与材质尽可能将同一个角色甚至多个角色的所有图片打包到同一张纹理图集Texture Atlas中。Spine编辑器可以很好地完成图集打包。这样所有使用该图集的部件可以共享同一个材质球。检查渲染分离在Unity的SkeletonAnimation组件Inspector中展开Advanced折叠栏确保Separator Slot Names为空除非你明确需要将某个插槽后的部件分离到新的渲染批次通常用于实现角色被遮挡效果。使用SkeletonRenderer的SubmeshDrawCalls属性在代码中你可以通过skeletonAnimation.SkeletonRenderer.SubmeshDrawCalls来查询当前角色的Draw Call数量用于性能监控。一个常见的性能陷阱是美术为角色每个部分都使用了不同的混合模式如正常、叠加、正片叠底这会导致Unity为每种混合模式创建独立的材质球实例从而增加Draw Call。如果非必需尽量统一混合模式。5.3 内存管理与资源卸载对于动态加载和卸载Spine角色的项目如大型开放世界需要小心管理内存。SkeletonDataAsset是主要的资源占用者。引用管理确保场景中的SkeletonAnimation组件对SkeletonDataAsset的引用被正确释放。当销毁一个Spine角色GameObject时如果该SkeletonDataAsset没有被其他角色使用你可以考虑使用Resources.UnloadAsset或通过Addressables/AssetBundle系统进行卸载。共享数据多个相同角色的实例应该共享同一个SkeletonDataAsset。不要在内存中加载多份相同的数据。你可以通过预制件Prefab或脚本化的资源引用来实现共享。纹理图集同样纹理图集.png是内存消耗大户。确保图集尺寸合理通常是2的幂次方并且没有浪费太多空白空间。对于移动平台使用ASTC或ETC2等压缩格式可以显著减少内存占用。6. 常见问题排查与实战技巧6.1 动画播放异常问题速查以下表格整理了我遇到过的一些典型问题及解决方法问题现象可能原因排查步骤与解决方案角色显示为紫红色Missing Material1. 图集文件.atlas与图片文件.png不匹配或路径错误。2. 材质球丢失或着色器错误。1. 检查.atlas文件内容确认其引用的图片文件名与实际的.png文件完全一致。2. 在SkeletonDataAsset的Inspector中检查其关联的AtlasAssets列表确保每个AtlasAsset能正确找到材质和纹理。动画播放卡顿、不流畅1. 每帧更新的骨骼数量过多特别是使用了FFD网格。2. Draw Call过高。3. 在Update中进行了昂贵的字符串操作或查找。1. 在Spine编辑器中优化骨骼和网格数量减少不必要的顶点。2. 使用Unity Profiler查看CanvasRenderer或Mesh相关的CPU耗时并按照5.2节优化合批。3. 缓存动画名称、轨道索引等避免在循环中调用FindAnimation或FindSlot。换肤或换附件后显示不正确忘记在调用SetSkin或SetAttachment后调用SetSlotsToSetupPose()。务必在更改皮肤或附件后调用skeleton.SetSlotsToSetupPose()并通常需要跟一句skeletonAnimation.Update(0)强制立即更新。动画事件没有触发1. 事件名称拼写错误。2. 没有正确订阅AnimationState.Event回调。3. 事件被上层轨道的动画覆盖了。1. 在代码中打印e.Data.Name确认事件名称。2. 检查订阅代码是否执行例如组件是否已启用。3. 检查事件所在的动画轨道是否被更高优先级的轨道动画所覆盖。在UI Canvas中渲染顺序错乱Spine渲染器与Unity UI的渲染排序冲突。确保Spine GameObject的Canvas Renderer组件如果使用SkeletonGraphic或MeshRenderer组件的Sorting Layer和Order in Layer设置正确。对于SkeletonGraphic可以直接在Inspector中设置其Raycast Target和Material属性以适应UI。6.2 与Unity其他系统的集成技巧1. 与Unity 2D物理系统交互Spine骨骼本身没有碰撞体。如果你需要为角色添加物理碰撞如脚部着地检测需要在对应的骨骼上挂载Unity的2D碰撞体如BoxCollider2D。并通过代码在Update或LateUpdate中根据骨骼的世界位置和旋转来同步更新碰撞体的transform。public Bone bone; // 在Inspector中指定骨骼如“foot” public BoxCollider2D footCollider; void LateUpdate() { if (bone ! null footCollider ! null) { footCollider.transform.position bone.GetWorldPosition(); footCollider.transform.rotation Quaternion.Euler(0, 0, bone.WorldRotationX); // 注意骨骼缩放可能也需要同步这取决于你的需求 } }2. 使用SkeletonGraphic在UI系统中渲染对于需要在UGUI界面上显示的Spine动画如动态图标、角色立绘可以使用SkeletonGraphic组件。它继承自MaskableGraphic可以直接放在Canvas下。使用方法与SkeletonAnimation类似但动画控制需要通过SkeletonGraphic.AnimationState。需要注意的是SkeletonGraphic的渲染受Canvas的影响对于大量动态UI动画需注意Canvas的重建开销。3. 动画状态与游戏逻辑状态同步避免在游戏的逻辑状态机如“是否在地面”中直接依赖动画播放的完成。因为动画可能被混合、打断或变速播放。更健壮的做法是动画播放攻击动画并触发“hit”事件游戏逻辑在收到事件时进行伤害计算或者由游戏逻辑状态决定播放哪个动画动画只负责视觉表现。这种表现与逻辑的分离能让代码更清晰也更容易应对需求变化。最后保持spine-unity运行时的更新并时常查阅其官方文档。Spine团队会持续修复BUG和优化性能。将你的项目经验与官方最佳实践结合就能让Spine动画在Unity中发挥出最大的威力为你的游戏增添流畅而富有表现力的视觉体验。

相关新闻

【RT-DETR涨点改进】ECCV 2026 | 特征融合改进篇 |引入DBFSAF双分支频率-空间自适应融合模块,增强频率多样性并自适应地捕获频域与空间域的判别性特征,助力小目标检测任务,有效涨点

【RT-DETR涨点改进】ECCV 2026 | 特征融合改进篇 |引入DBFSAF双分支频率-空间自适应融合模块,增强频率多样性并自适应地捕获频域与空间域的判别性特征,助力小目标检测任务,有效涨点

一、本文介绍 🔥本文给大家介绍使用 DBFSAF双分支频率-空间自适应融合模块 改进RT-DETR网络模型,DBFSAF可针对不同层级特征的频率差异进行动态建模,通过频率动态卷积增强目标边缘、纹理和局部对比度,并利用多尺度空间精炼与频率处理单元协同融合高频细节和全局语义,同时…

2026/10/9 16:09:07 阅读更多 →
机器人榜单高分≠产线硬实力:落地四大支柱解析

机器人榜单高分≠产线硬实力:落地四大支柱解析

1. 项目概述:当“榜单分数”成了机器人行业的通用货币,我们却忘了问一句——它买得到真实产线上的一个稳定抓取动作吗?最近在几个工业自动化客户现场做方案评审,会议室白板上贴着三张A4纸:一张是某国际权威机构发布的“…

2026/10/11 1:15:43 阅读更多 →
FastAPI模块化路由实践与APIRouter深度解析

FastAPI模块化路由实践与APIRouter深度解析

1. FastAPI工程化模块路由深度解析在构建中大型FastAPI应用时,直接在主文件中编写所有路由会迅速导致代码臃肿难维护。APIRouter作为FastAPI的核心路由组件,能够将应用拆分为多个逻辑模块,每个模块管理自己的路由和依赖项。这种工程化实践不仅…

2026/10/9 16:07:53 阅读更多 →

最新新闻

项目分享|videocut-skills:Claude Code专属视频剪辑Agent,一键搞定口播优化

项目分享|videocut-skills:Claude Code专属视频剪辑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/12 17:05:34 阅读更多 →
干货:深度剖析MCP三大核心通信模式STDIO、SSE与Streamable HTTP——TaoToken统一Key/API通道下的选型与验证

干货:深度剖析MCP三大核心通信模式STDIO、SSE与Streamable HTTP——TaoToken统一Key/API通道下的选型与验证

/* 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 17:05:34 阅读更多 →
工欲善其事-1-vscode+git:把 settings 改到 TaoToken 的 AI 编码环境搭建

工欲善其事-1-vscode+git:把 settings 改到 TaoToken 的 AI 编码环境搭建

/* 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 17:05:33 阅读更多 →
AP侧WiFi驱动编程指南:架构解析、功能配置与调试实战

AP侧WiFi驱动编程指南:架构解析、功能配置与调试实战

简介:《高通WiFi驱动的指导文档》是一份面向接入点(AP)设备开发者的高通WLAN驱动编程指南,适合从事无线协议栈、驱动移植或网络优化的工程师阅读。文档系统讲解了驱动的安装、配置、优化与故障排查,并重点阐述了Split …

2026/10/12 17:05:32 阅读更多 →
三行代码实现嵌入式按键消抖与事件分离

三行代码实现嵌入式按键消抖与事件分离

1. 项目概述:为什么三行代码能真正解决按键问题?“按键按下、松开、长按”——这七个字看似简单,却是嵌入式开发、单片机应用、IoT设备交互、甚至智能硬件原型验证中最高频、最易翻车的基础需求。我带过不少刚入门的开发者,也帮某…

2026/10/12 17:05:31 阅读更多 →
标准单元:数字芯片设计的乐高积木,从原理到工程实践

标准单元:数字芯片设计的乐高积木,从原理到工程实践

做了好几年数字芯片设计,我对标准单元(Standard Cell)的感情,经历过从“它就是个黑盒子”到“它其实是芯片设计的地基”的转变。刚入行时,跑综合、跑布局布线,工具里密密麻麻的单元库文件对我来说就是一堆待…

2026/10/12 17:04:30 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

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

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

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

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

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

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

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

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

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