基于DC2格式与骨骼动画实现可交互坦克动画系统
大家好我是专注于技术实战分享的博主。今天我们来深入探讨一个在游戏开发、数字孪生和三维可视化领域非常经典且实用的主题如何基于DC2格式和Gerand坦克模型实现一套完整的、可交互的坦克动画系统。无论你是刚接触3D编程的新手还是希望将静态模型转化为生动动画的开发者这篇文章都将为你提供从零到一的完整路径。我们将从核心概念解析开始逐步搭建开发环境编写控制代码并最终实现坦克的移动、旋转、炮塔瞄准等动画效果。过程中会涵盖模型加载、骨骼动画解析、键盘/鼠标事件响应等关键技术点并提供可直接复用的代码示例。学完后你将能够独立地将一个静态的3D坦克模型变成一个可以在场景中自由驰骋的“活”的实体。1. 背景与核心概念在开始动手之前我们首先要厘清几个关键术语这有助于理解整个项目的技术栈和目标。1.1 什么是 DC2 格式DC2通常指的是一种3D模型文件格式尤其在早期的游戏和仿真项目中较为常见。它类似于.obj或.fbx格式用于存储模型的几何信息顶点、面、材质、纹理坐标以及骨骼动画数据。一个.dc2文件可能包含静态网格坦克的车体、履带、轮子等部件的形状。骨骼层级定义坦克各个可动部件如炮塔、炮管、车轮之间的父子关系和变换信息。动画序列存储骨骼在时间轴上的位置、旋转变化从而实现“开炮”、“履带转动”等动作。在我们的上下文中处理 DC2 文件的核心目标就是解析这些骨骼和动画数据并在渲染引擎中驱动模型做出相应的动作。1.2 什么是 Gerand 坦克模型“Gerand”很可能是一个特定坦克模型的名称或代号可能来源于某个开源模型库、游戏模组或仿真数据集。它本身没有特殊的格式含义我们将其理解为一个以 DC2 格式存储的、包含完整骨骼结构的坦克3D模型。这个模型通常已经由美术人员制作好了骨骼绑定和基础动画如 idle 待机、前进、转向等。1.3 我们要实现的“坦克动画”系统我们的目标不仅仅是播放一个预制的动画片段比如开炮而是要创建一个实时的、由玩家控制的动画系统。这通常包含两个层面程序化动画根据坦克的移动速度、转向角度实时计算并更新履带、车轮的旋转状态以及车体的起伏。骨骼动画混合根据玩家输入如WASD移动、鼠标瞄准平滑地混合或叠加不同的骨骼动画状态如从“静止”过渡到“移动”炮塔跟随鼠标旋转。最终效果是用户按下“W”键坦克前进履带动画循环播放移动鼠标炮塔和炮管平滑地转向瞄准点。2. 环境准备与版本说明为了实现上述系统我们需要选择一个合适的3D渲染和动画引擎。这里我们以跨平台、功能强大且社区活跃的Unity为例。当然你也可以使用 Unreal Engine、Three.js (WebGL) 或自定义的 OpenGL/DirectX 渲染器但原理相通。环境配置清单开发引擎Unity 2022.3 LTS 或更高版本。LTS版本稳定性好适合项目开发。编程语言C#。这是Unity的主要脚本语言。集成开发环境Visual Studio 2022 或 JetBrains Rider。模型文件Gerand_Tank.dc2文件及其配套的纹理图片如.dds,.png,.jpg。关键插件/工具由于Unity原生不支持.dc2格式我们需要一个转换步骤。通常有两种方式使用Autodesk FBX Converter等第三方工具先将.dc2转换为.fbx格式再导入Unity。编写或寻找一个DC2 导入插件可能需要自己解析二进制格式。对于教程我们假设已通过工具将其转换为FBX。项目结构预览Assets/ ├── Models/ │ └── Gerand_Tank.fbx // 转换后的坦克模型 ├── Textures/ // 坦克贴图文件 ├── Scripts/ │ ├── TankAnimationController.cs // 核心动画控制脚本 │ └── TankInputHandler.cs // 输入处理脚本 ├── Animations/ // 导入的动画片段如Track_Loop └── Scenes/ └── MainTankScene.unity // 主测试场景3. 核心原理与 Unity 动画系统拆解在编写代码前必须理解 Unity 的动画系统如何工作特别是Animator 控制器和骨骼动画驱动的原理。3.1 动画类型关键帧动画 vs 程序化动画关键帧动画美术预先在3D软件中制作好的动画如“开炮”、“爆炸”。在Unity中表现为AnimationClip。程序化动画通过代码实时计算模型部件的变化。例如根据速度计算履带纹理偏移UV动画或车轮旋转角度。对于坦克履带滚动和车轮旋转通常用程序化动画实现而炮塔旋转和开炮可以用关键帧动画也可以用程序化动画直接旋转骨骼。我们将结合使用。3.2 Unity Animator 与状态机Animator组件驱动一个Animator Controller这是一个可视化的状态机。我们可以定义状态如Idle,Move和转换条件如Speed 0.1。但对于需要精细、连续控制的坦克我们更多会通过代码直接操作动画参数或骨骼。3.3 骨骼变换与 SkinnedMeshRenderer导入的FBX模型如果带有骨骼会生成一个SkinnedMeshRenderer组件。我们可以通过代码访问其骨骼变换Transform并直接修改其位置和旋转从而实现炮塔瞄准等效果。// 示例在模型层级中找到炮塔骨骼并旋转它 public class TankAim : MonoBehaviour { public Transform turretBone; // 在Inspector中拖拽赋值 public float rotationSpeed 30f; void Update() { if (turretBone ! null) { // 假设水平旋转 float rotationInput Input.GetAxis(Mouse X); turretBone.Rotate(Vector3.up, rotationInput * rotationSpeed * Time.deltaTime); } } }4. 完整实战构建坦克动画控制系统接下来我们一步步实现一个功能完整的坦克动画控制器。4.1 模型导入与设置将转换好的Gerand_Tank.fbx拖入 Unity 项目的Assets/Models文件夹。在 Inspector 面板中检查模型导入设置Rig页签将Animation Type设置为Humanoid或Generic。对于坦克Generic通常更合适。确保Avatar已生成。Animations页签如果FBX内包含动画片段如履带动画这里会列出。确保它们被正确导入。4.2 创建坦克预制体与组件将模型从 Project 窗口拖入 Scene 视图或 Hierarchy 窗口创建一个实例。选中该实例在 Inspector 中点击Add Component添加Rigidbody(用于物理移动质量Mass设为较大值如 30000)Capsule Collider或Box Collider(用于碰撞)Animator组件即使我们主要用代码控制也先保留。将此配置好的游戏对象拖回 Project 窗口的Assets/Prefabs文件夹创建一个预制体Tank_Prefab。4.3 编写核心控制脚本TankController.cs这是最核心的脚本负责移动、转向和驱动基础动画。// 文件路径Assets/Scripts/TankController.cs using UnityEngine; [RequireComponent(typeof(Rigidbody))] public class TankController : MonoBehaviour { [Header(移动参数)] public float moveSpeed 10f; // 前进后退速度 public float rotateSpeed 30f; // 原地转向速度 private float currentSpeed; private float currentRotate; [Header(履带与车轮动画)] public Transform[] leftWheels; // 左侧车轮骨骼数组 public Transform[] rightWheels; // 右侧车轮骨骼数组 public float wheelRotationSpeedFactor 180f; // 车轮旋转系数 public Renderer leftTrackRenderer; // 左侧履带MeshRenderer public Renderer rightTrackRenderer;// 右侧履带MeshRenderer public float trackScrollSpeedFactor 0.05f; // 履带纹理滚动系数 private Material leftTrackMat; private Material rightTrackMat; [Header(炮塔控制)] public Transform turretBone; public float turretRotationSpeed 60f; private float targetTurretYaw 0f; private Rigidbody rb; void Start() { rb GetComponentRigidbody(); rb.centerOfMass new Vector3(0, -0.5f, 0); // 降低重心防止翻车 // 获取履带材质实例以便独立修改 if (leftTrackRenderer ! null) leftTrackMat leftTrackRenderer.material; if (rightTrackRenderer ! null) rightTrackMat rightTrackRenderer.material; } void Update() { HandleInput(); UpdateTurretAim(); } void FixedUpdate() { MoveTank(); UpdateWheelAndTrackAnimation(); } void HandleInput() { // 基础移动输入W/S 控制速度A/D 控制转向 float vertical Input.GetAxis(Vertical); float horizontal Input.GetAxis(Horizontal); currentSpeed vertical * moveSpeed; currentRotate horizontal * rotateSpeed; // 鼠标控制炮塔水平旋转简化版 if (Input.GetMouseButton(1)) // 按住右键旋转炮塔 { float mouseX Input.GetAxis(Mouse X); targetTurretYaw mouseX * turretRotationSpeed * Time.deltaTime; } } void MoveTank() { // 应用移动和旋转到 Rigidbody Vector3 moveVector transform.forward * currentSpeed * Time.fixedDeltaTime; rb.MovePosition(rb.position moveVector); float rotateAmount currentRotate * Time.fixedDeltaTime; Quaternion deltaRotation Quaternion.Euler(0, rotateAmount, 0); rb.MoveRotation(rb.rotation * deltaRotation); } void UpdateWheelAndTrackAnimation() { // 1. 旋转车轮骨骼 float wheelRotation currentSpeed * wheelRotationSpeedFactor * Time.fixedDeltaTime; foreach (Transform wheel in leftWheels) { if (wheel ! null) wheel.Rotate(wheelRotation, 0, 0, Space.Self); } foreach (Transform wheel in rightWheels) { if (wheel ! null) wheel.Rotate(wheelRotation, 0, 0, Space.Self); } // 2. 滚动履带纹理 (UV偏移) float trackOffset currentSpeed * trackScrollSpeedFactor * Time.time; if (leftTrackMat ! null) leftTrackMat.mainTextureOffset new Vector2(0, trackOffset); if (rightTrackMat ! null) rightTrackMat.mainTextureOffset new Vector2(0, trackOffset); } void UpdateTurretAim() { if (turretBone ! null) { // 平滑旋转炮塔到目标角度 Quaternion targetRotation Quaternion.Euler(0, targetTurretYaw, 0); turretBone.localRotation Quaternion.Slerp(turretBone.localRotation, targetRotation, 5f * Time.deltaTime); } } }4.4 配置坦克预制体将TankController.cs脚本拖到Tank_Prefab上。在 Inspector 中为脚本的公共变量赋值Left Wheels/Right Wheels将层级中所有左侧和右侧的车轮骨骼Transform拖入数组。Left Track Renderer/Right Track Renderer拖入代表左右履带的 MeshRenderer 组件。Turret Bone拖入炮塔骨骼的 Transform。4.5 创建相机跟随脚本为了让视角跟随坦克创建一个简单的相机跟随脚本。// 文件路径Assets/Scripts/CameraFollow.cs using UnityEngine; public class CameraFollow : MonoBehaviour { public Transform target; // 坦克的Transform public Vector3 offset new Vector3(0, 5, -10); // 相机相对于坦克的偏移 public float smoothSpeed 0.125f; void LateUpdate() { if (target null) return; Vector3 desiredPosition target.position target.rotation * offset; Vector3 smoothedPosition Vector3.Lerp(transform.position, desiredPosition, smoothSpeed); transform.position smoothedPosition; transform.LookAt(target); } }将脚本挂载到主相机上并将Tank_Prefab拖给Target变量。4.6 运行与验证将Tank_Prefab拖入场景。点击 Unity 播放按钮。使用W/S键控制坦克前进后退A/D键控制坦克转向。按住鼠标右键并移动观察炮塔是否跟随鼠标水平旋转。观察车轮是否转动履带纹理是否滚动。如果一切正常你将看到一个完全由代码驱动的、可交互的坦克动画系统在运行。5. 常见问题与排查思路在实现过程中你可能会遇到以下典型问题问题现象可能原因排查与解决方案坦克模型一动不动1.Rigidbody被设置为Kinematic。2. 脚本未正确挂载或启用。3. 输入轴名称不对。1. 检查Rigidbody组件确保Is Kinematic未勾选。2. 检查 Hierarchy 中坦克对象是否有TankController组件且脚本左侧勾选框为启用状态。3. 打开Edit - Project Settings - Input Manager确认Vertical和Horizontal轴存在。车轮或履带不动1. 车轮骨骼数组未正确赋值。2. 履带 Renderer 或 Material 未赋值。3.currentSpeed始终为0。1. 在 Inspector 中确认Left/Right Wheels数组大小不为0且每个元素都指向正确的骨骼。2. 确认Left/Right Track Renderer已赋值。确保履带材质不是sharedMaterial否则会修改所有使用该材质的对象。3. 在Update方法中打印currentSpeed值检查输入是否生效。炮塔不旋转1.turretBone未赋值。2. 旋转代码逻辑错误如坐标系问题。3. 骨骼变换受父级动画覆盖。1. 确认turretBone变量指向了正确的炮塔骨骼。2. 尝试用简单的turretBone.Rotate(0, 1, 0)测试是否旋转以排除输入逻辑问题。3. 检查 Animator 组件是否正在播放一个覆盖了炮塔骨骼变换的动画。可以尝试禁用 Animator 组件。坦克物理表现怪异翻车、打滑1.Rigidbody质量、阻力设置不当。2. 碰撞体形状或位置不对。3. 移动逻辑在Update而非FixedUpdate中。1. 调整Rigidbody的Mass、Drag和Angular Drag。增加质量增加阻力可以减少打滑。2. 调整碰撞体使其更贴合坦克底盘。3. 确保所有涉及物理移动和力的代码都在FixedUpdate中调用。导入的DC2/FBX模型显示为粉红色材质丢失或Shader不兼容。1. 检查Materials导入设置尝试重新提取材质。2. 检查纹理文件是否在正确路径。将纹理拖到模型的材质球上。3. 在 Project 窗口选中模型在 Inspector 的Materials页签下点击Extract Materials。6. 最佳实践与工程建议将基础功能跑通只是第一步要打造一个健壮、可维护的坦克动画系统还需要注意以下几点6.1 动画状态管理进阶对于更复杂的动画如开炮、受损、不同速度下的移动姿态建议使用Animator状态机进行管理并与代码协同工作。创建 Animator Controller定义Idle,Move,Shoot,Damaged等状态。使用参数驱动在TankController脚本中设置 Animator 的参数。Animator animator; void Start() { animator GetComponentAnimator(); } void Update() { animator.SetFloat(Speed, Mathf.Abs(currentSpeed)); }动画层与遮罩使用动画层将上半身炮塔和下半身车体动画分离实现边移动边瞄准。6.2 输入系统抽象不要将输入逻辑硬编码在控制器里。使用 Unity 新的Input System包它更强大、更灵活且支持多种输入设备。通过 Package Manager 安装Input System。创建TankControlsInput Action Asset。在脚本中使用PlayerInput组件或InputAction来读取输入使代码与具体的按键解耦。6.3 性能优化骨骼数量坦克模型骨骼数不宜过多过多的骨骼会影响性能。确保美术在导出时进行了优化。材质合并尽量减少坦克模型的材质球数量使用纹理图集。LOD多层次细节为坦克创建不同精度的模型在远距离时使用面数更低的模型提升渲染效率。对象池对于炮弹、爆炸效果等频繁创建销毁的对象务必使用对象池技术。6.4 网络同步如需多人游戏如果目标是制作多人坦克游戏动画状态需要通过网络同步。状态同步同步坦克的位置、旋转、速度、炮塔角度等关键状态而不是具体的输入指令。插值与预测在客户端对其他玩家的坦克进行运动插值和动画状态插值以平滑显示。权威服务器重要的逻辑如碰撞、伤害计算应在服务器进行防止作弊。6.5 资源管理与配置化使用 ScriptableObject将坦克的属性移动速度、旋转速度、血量、装甲值创建为TankConfigScriptableObject 资产。这样可以在不修改代码的情况下平衡游戏数据也便于策划人员调整。清晰的资源目录如本文开头的项目结构所示保持模型、脚本、动画、配置文件的目录清晰。7. 总结与扩展方向通过本教程我们完成了一个基于 DC2 格式 Gerand 坦克模型的完整动画控制系统。我们从理解模型格式和动画原理开始到在 Unity 中搭建环境、编写核心控制脚本实现了坦克的移动、转向、履带滚动、车轮旋转和炮塔瞄准等核心动画功能。关键掌握点模型与骨骼理解了如何通过代码访问和操控模型骨骼来实现程序化动画。输入与物理将玩家输入转化为对Rigidbody的控制实现符合物理直觉的移动。组件化设计将输入、控制、动画更新、相机跟随等功能分离到不同的脚本保持代码清晰。问题排查建立了对常见问题如不动、不旋转、物理异常的系统排查思路。下一步可以探索高级动画集成Animator状态机添加开炮、爆炸、履带脱落等关键帧动画。音效系统为引擎声、开炮声、履带声添加空间音频。伤害与UI实现血条、准星、弹药显示并计算不同部位的伤害。AI控制为坦克编写简单的AI实现自动寻路、索敌和攻击。技术的学习在于实践和迭代。建议你以本项目为基础尝试添加上述任一扩展功能过程中遇到问题再回头查阅相关文档和社区。希望这篇详细的指南能为你打开3D游戏动画开发的大门。如果在实现过程中有新的发现或踩坑经验也欢迎在评论区分享交流。

相关新闻

风光出力模拟的蒙特卡洛方法与实践优化

风光出力模拟的蒙特卡洛方法与实践优化

1. 风光出力模拟的挑战与蒙特卡洛的破局思路 在新能源电力系统规划中,风光出力的随机性和波动性一直是核心难题。传统确定性方法采用典型日曲线或极值场景,往往低估了实际运行中的风险。我参与过多个省级电网的新能源消纳项目,深刻体会到这种…

2026/10/11 8:52:40 阅读更多 →
如何用Czkawka/Krokiet彻底清理磁盘重复文件?跨平台空间优化完全指南

如何用Czkawka/Krokiet彻底清理磁盘重复文件?跨平台空间优化完全指南

如何用Czkawka/Krokiet彻底清理磁盘重复文件?跨平台空间优化完全指南 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 你是否曾疑惑为什…

2026/9/28 21:16:42 阅读更多 →
UE5.6与MetaHuman实战:从零创建高保真数字人全流程指南

UE5.6与MetaHuman实战:从零创建高保真数字人全流程指南

1. 项目概述:从蓝图到活生生的数字人如果你最近关注过游戏开发、虚拟直播或者影视制作,大概率会听到“数字人”这个词。它不再是科幻电影里的概念,而是正实实在在地走进我们的工作流。作为一个在实时3D领域摸爬滚打多年的从业者,我…

2026/10/9 20:19:26 阅读更多 →

最新新闻

从环境到上线:Vue项目实战与踩坑全指南

从环境到上线:Vue项目实战与踩坑全指南

干 Vue 这些年,见得最多的就是新手把环境配到一半就卡住,然后跑来问“为什么我 npm run dev 直接报错”“为什么 devtools 不显示”。其实 Vue 本身不难,难的是把生态里的一堆配套工具摸清楚,再踩过几个经典的坑。这篇文章我就按实…

2026/10/11 8:52:41 阅读更多 →
弹性扩容实战:流量洪峰下如何弹性伸缩与避坑

弹性扩容实战:流量洪峰下如何弹性伸缩与避坑

“老板,客户那边流量爆了,凌晨三点服务器扛不住,赶紧想想办法!”做云渠道这些年,这种电话我接过不止一次。所谓“业务流量洪峰”从来不是某个固定时刻准时到来,它可能来自一次大促、一场直播、一个热点事件…

2026/10/11 8:52:41 阅读更多 →
天地图403排查实战:Vue3部署与Nginx反代避坑指南

天地图403排查实战:Vue3部署与Nginx反代避坑指南

上周把vue3项目部署到线上服务器,第二天同事就找过来:“地图白屏了,控制台一片403。”我看了一眼浏览器Network面板,天地图的瓦片请求齐刷刷返回403 Forbidden。这个场景我太熟了,本地开发时地图还好好的,一…

2026/10/11 8:52:41 阅读更多 →
OpenClaw开源重制引擎:让经典老游戏在现代系统上重生

OpenClaw开源重制引擎:让经典老游戏在现代系统上重生

作为一个从小在街机厅和奔腾MMX电脑前泡大的老玩家,我太清楚那些经典老游戏如今有多难伺候了。系统不兼容、分辨率撕裂、画面抖得像中风,更别提把手里的手柄映射到一堆莫名其妙DirectDraw错误上。今天要聊的OpenClaw(圈子里的朋友们喜欢叫它“…

2026/10/11 8:52:41 阅读更多 →
Unity C#进阶:从缓存、对象池到事件驱动的性能优化实战

Unity C#进阶:从缓存、对象池到事件驱动的性能优化实战

在 Unity 项目里,“代码能跑”和“代码能撑住项目”是两回事。很多人写了一阵子 C# 脚本,功能都做出来了,但项目一到真机就发热、掉帧,或者场景稍微复杂一点就卡顿。这时候回头看代码,往往能找到一堆Update里反复GetCo…

2026/10/11 8:52:41 阅读更多 →
2026年实时数据同步工具怎么选?GoldenGate、Striim、SeaTunnel、FineDataLink 5.0横评

2026年实时数据同步工具怎么选?GoldenGate、Striim、SeaTunnel、FineDataLink 5.0横评

实时数据同步,是这两年企业数据建设里绕不开的一环。业务对实时性的要求越来越高——库存要实时、订单要实时、设备状态要实时,T1 的离线数仓在很多场景下已经不够用了。于是选型的问题摆在了面前:GoldenGate、Striim、SeaTunnel、FineDataLi…

2026/10/11 8:51:41 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →