游戏AI与弹幕系统开发:行为树与对象池技术实战解析
碧蓝航线塞壬清除者与孤岛危机外星母舰技术解析从游戏机制到战斗AI实现在游戏开发领域不同游戏中的敌对单位设计往往反映了各自技术架构的特点。最近在技术社区看到不少开发者对《碧蓝航线》的塞壬清除者和《孤岛危机》的外星母舰的战斗机制感兴趣特别是它们的AI行为模式、攻击逻辑和性能优化方案。本文将深入分析这两类经典敌对单位的技术实现差异并提供可复用的游戏开发实战代码。1. 敌对单位技术架构概述1.1 塞壬清除者的技术定位塞壬清除者是《碧蓝航线》中的高级敌对单位属于弹幕射击类游戏的BOSS级敌人。从技术角度看这类单位需要处理复杂的弹幕模式、碰撞检测和性能优化问题。核心技术要求弹幕系统支持多种攻击模式的动态切换碰撞检测精确的命中判定算法状态管理多个战斗阶段的状态转换性能优化大量弹幕实例的对象池管理1.2 外星母舰的技术特点《孤岛危机》中的外星母舰作为FPS游戏的巨型敌对单位技术实现更侧重于物理模拟、AI路径规划和视觉特效。关键技术组件物理引擎集成真实的碰撞体和运动模拟高级AI系统复杂的决策树和行为树渲染优化LOD细节层次技术和遮挡剔除音效系统3D空间音效定位2. 弹幕系统实现方案2.1 基础弹幕类设计以下是一个通用的弹幕系统基础类实现适用于类似塞壬清除者的弹幕攻击public abstract class BulletPattern { protected Transform emitter; protected BulletPool bulletPool; protected float fireRate; protected int bulletCount; public BulletPattern(Transform emitter, BulletPool pool) { this.emitter emitter; this.bulletPool pool; } public abstract void ExecutePattern(); protected virtual void FireBullet(Vector3 direction, float speed) { var bullet bulletPool.GetBullet(); bullet.transform.position emitter.position; bullet.SetDirection(direction, speed); } } // 圆形弹幕模式实现 public class CircularPattern : BulletPattern { private float radius; private float angleStep; public CircularPattern(Transform emitter, BulletPool pool, int bulletCount) : base(emitter, pool) { this.bulletCount bulletCount; this.angleStep 360f / bulletCount; } public override void ExecutePattern() { for (int i 0; i bulletCount; i) { float angle i * angleStep; Vector3 direction new Vector3( Mathf.Cos(angle * Mathf.Deg2Rad), Mathf.Sin(angle * Mathf.Deg2Rad), 0 ); FireBullet(direction, 5f); } } }2.2 弹幕对象池优化对于高频发射的弹幕系统对象池是必备的优化手段public class BulletPool : MonoBehaviour { public GameObject bulletPrefab; public int poolSize 100; private QueueBullet availableBullets new QueueBullet(); private ListBullet activeBullets new ListBullet(); void Start() { InitializePool(); } private void InitializePool() { for (int i 0; i poolSize; i) { GameObject newBullet Instantiate(bulletPrefab); Bullet bulletComponent newBullet.GetComponentBullet(); newBullet.SetActive(false); availableBullets.Enqueue(bulletComponent); } } public Bullet GetBullet() { if (availableBullets.Count 0) { ExpandPool(10); } Bullet bullet availableBullets.Dequeue(); bullet.gameObject.SetActive(true); activeBullets.Add(bullet); bullet.OnBulletDestroyed ReturnBulletToPool; return bullet; } private void ReturnBulletToPool(Bullet bullet) { bullet.gameObject.SetActive(false); activeBullets.Remove(bullet); availableBullets.Enqueue(bullet); bullet.OnBulletDestroyed - ReturnBulletToPool; } private void ExpandPool(int expandSize) { for (int i 0; i expandSize; i) { GameObject newBullet Instantiate(bulletPrefab); Bullet bulletComponent newBullet.GetComponentBullet(); newBullet.SetActive(false); availableBullets.Enqueue(bulletComponent); } } }3. 高级AI行为树实现3.1 行为树基础架构外星母舰这类复杂AI单位适合使用行为树架构以下是一个基础实现public abstract class BTNode { public enum Status { Running, Success, Failure } public abstract Status Execute(); } public class SequenceNode : BTNode { private ListBTNode children new ListBTNode(); private int currentChildIndex 0; public void AddChild(BTNode child) { children.Add(child); } public override Status Execute() { if (currentChildIndex children.Count) { currentChildIndex 0; return Status.Success; } Status childStatus children[currentChildIndex].Execute(); switch (childStatus) { case Status.Running: return Status.Running; case Status.Failure: currentChildIndex 0; return Status.Failure; case Status.Success: currentChildIndex; return currentChildIndex children.Count ? Status.Success : Status.Running; } return Status.Failure; } } public class SelectorNode : BTNode { private ListBTNode children new ListBTNode(); private int currentChildIndex 0; public void AddChild(BTNode child) { children.Add(child); } public override Status Execute() { if (currentChildIndex children.Count) { currentChildIndex 0; return Status.Failure; } Status childStatus children[currentChildIndex].Execute(); switch (childStatus) { case Status.Running: return Status.Running; case Status.Success: currentChildIndex 0; return Status.Success; case Status.Failure: currentChildIndex; return currentChildIndex children.Count ? Status.Failure : Status.Running; } return Status.Failure; } }3.2 条件节点和行动节点实现具体的AI行为需要定义条件判断和执行节点public class DistanceCondition : BTNode { private Transform aiTransform; private Transform targetTransform; private float thresholdDistance; public DistanceCondition(Transform ai, Transform target, float distance) { aiTransform ai; targetTransform target; thresholdDistance distance; } public override Status Execute() { float distance Vector3.Distance(aiTransform.position, targetTransform.position); return distance thresholdDistance ? Status.Success : Status.Failure; } } public class MoveToAction : BTNode { private Transform aiTransform; private Transform targetTransform; private float moveSpeed; private float stoppingDistance; public MoveToAction(Transform ai, Transform target, float speed, float stopDistance) { aiTransform ai; targetTransform target; moveSpeed speed; stoppingDistance stopDistance; } public override Status Execute() { Vector3 direction (targetTransform.position - aiTransform.position).normalized; aiTransform.position direction * moveSpeed * Time.deltaTime; float distance Vector3.Distance(aiTransform.position, targetTransform.position); return distance stoppingDistance ? Status.Success : Status.Running; } }4. 碰撞检测系统优化4.1 分层碰撞检测对于大量弹幕的碰撞检测需要优化性能public class OptimizedCollisionSystem : MonoBehaviour { private Dictionaryint, ListICollidable collidableLayers new Dictionaryint, ListICollidable(); public void RegisterCollidable(ICollidable collidable, int layer) { if (!collidableLayers.ContainsKey(layer)) { collidableLayers[layer] new ListICollidable(); } collidableLayers[layer].Add(collidable); } void Update() { // 只检测需要交互的层组合 CheckLayerCollision(8, 9); // 玩家子弹 vs 敌人 CheckLayerCollision(9, 8); // 敌人子弹 vs 玩家 } private void CheckLayerCollision(int layerA, int layerB) { if (!collidableLayers.ContainsKey(layerA) || !collidableLayers.ContainsKey(layerB)) return; var listA collidableLayers[layerA]; var listB collidableLayers[layerB]; for (int i listA.Count - 1; i 0; i--) { var collidableA listA[i]; if (collidableA null) continue; for (int j listB.Count - 1; j 0; j--) { var collidableB listB[j]; if (collidableB null) continue; if (IsColliding(collidableA, collidableB)) { collidableA.OnCollision(collidableB); collidableB.OnCollision(collidableA); } } } } private bool IsColliding(ICollidable a, ICollidable b) { // 简化的碰撞检测逻辑 return Vector3.Distance(a.Position, b.Position) (a.Radius b.Radius); } }4.2 空间分割优化对于大规模战斗场景使用空间分割技术public class SpatialHashGrid { private DictionaryVector2Int, ListICollidable cells new DictionaryVector2Int, ListICollidable(); private float cellSize; public SpatialHashGrid(float cellSize) { this.cellSize cellSize; } public Vector2Int GetCellKey(Vector3 position) { return new Vector2Int( Mathf.FloorToInt(position.x / cellSize), Mathf.FloorToInt(position.y / cellSize) ); } public void Insert(ICollidable collidable) { Vector2Int key GetCellKey(collidable.Position); if (!cells.ContainsKey(key)) { cells[key] new ListICollidable(); } cells[key].Add(collidable); } public ListICollidable GetNearby(Vector3 position, float radius) { ListICollidable result new ListICollidable(); int cellsRadius Mathf.CeilToInt(radius / cellSize); Vector2Int centerKey GetCellKey(position); for (int x -cellsRadius; x cellsRadius; x) { for (int y -cellsRadius; y cellsRadius; y) { Vector2Int key new Vector2Int(centerKey.x x, centerKey.y y); if (cells.ContainsKey(key)) { result.AddRange(cells[key]); } } } return result; } }5. 状态机与战斗阶段管理5.1 战斗状态机实现塞壬清除者通常有多个战斗阶段需要状态机管理public class BossStateMachine : MonoBehaviour { private DictionaryBossState, IBossState states new DictionaryBossState, IBossState(); private IBossState currentState; public enum BossState { Idle, Phase1, Phase2, Phase3, Defeated } void Start() { // 初始化各个状态 states[BossState.Idle] new IdleState(this); states[BossState.Phase1] new Phase1State(this); states[BossState.Phase2] new Phase2State(this); states[BossState.Phase3] new Phase3State(this); states[BossState.Defeated] new DefeatedState(this); ChangeState(BossState.Idle); } public void ChangeState(BossState newState) { currentState?.Exit(); currentState states[newState]; currentState.Enter(); } void Update() { currentState?.Update(); } } public interface IBossState { void Enter(); void Update(); void Exit(); } public class Phase1State : IBossState { private BossStateMachine stateMachine; private float timer; private float phaseDuration 60f; public Phase1State(BossStateMachine machine) { stateMachine machine; } public void Enter() { timer 0f; // 初始化第一阶段行为 StartPhase1Patterns(); } public void Update() { timer Time.deltaTime; if (timer phaseDuration) { stateMachine.ChangeState(BossStateMachine.BossState.Phase2); } // 更新第一阶段逻辑 UpdatePhase1Behavior(); } public void Exit() { // 清理第一阶段资源 CleanupPhase1(); } private void StartPhase1Patterns() { // 实现第一阶段特有的攻击模式 } private void UpdatePhase1Behavior() { // 更新第一阶段行为逻辑 } private void CleanupPhase1() { // 清理工作 } }6. 性能监控与优化策略6.1 性能分析工具实现性能监控系统来识别瓶颈public class PerformanceProfiler : MonoBehaviour { private Dictionarystring, float timers new Dictionarystring, float(); private Dictionarystring, int callCounts new Dictionarystring, int(); private Dictionarystring, float totalTimes new Dictionarystring, float(); public void StartTimer(string methodName) { timers[methodName] Time.realtimeSinceStartup; } public void EndTimer(string methodName) { if (!timers.ContainsKey(methodName)) return; float duration Time.realtimeSinceStartup - timers[methodName]; if (!totalTimes.ContainsKey(methodName)) { totalTimes[methodName] 0f; callCounts[methodName] 0; } totalTimes[methodName] duration; callCounts[methodName]; // 如果某个方法执行时间过长记录警告 if (duration 0.016f) // 超过一帧的时间 { Debug.LogWarning($性能警告: {methodName} 执行时间 {duration:F4}秒); } } void OnGUI() { // 在开发版本中显示性能统计 #if UNITY_EDITOR GUILayout.BeginArea(new Rect(10, 10, 300, 400)); GUILayout.Label(性能统计:); foreach (var kvp in totalTimes) { float avgTime kvp.Value / callCounts[kvp.Key]; GUILayout.Label(${kvp.Key}: 平均 {avgTime:F4}秒, 调用 {callCounts[kvp.Key]}次); } GUILayout.EndArea(); #endif } }6.2 内存优化策略针对大量游戏对象的内存管理public class MemoryOptimizer : MonoBehaviour { private const int MAX_BULLETS 200; private const int MAX_EFFECTS 50; public static MemoryOptimizer Instance { get; private set; } private void Awake() { if (Instance null) { Instance this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } public void OptimizeGameObjects() { // 清理未使用的资源 Resources.UnloadUnusedAssets(); // 手动触发垃圾回收谨慎使用 if (System.GC.GetTotalMemory(false) 500 * 1024 * 1024) // 超过500MB { System.GC.Collect(); } } public void LimitObjectCountT(ListT objectList, int maxCount) where T : MonoBehaviour { if (objectList.Count maxCount) { int objectsToRemove objectList.Count - maxCount; for (int i 0; i objectsToRemove; i) { if (objectList[i] ! null) { Destroy(objectList[i].gameObject); } } objectList.RemoveRange(0, objectsToRemove); } } }7. 跨平台兼容性考虑7.1 输入系统抽象确保在不同平台上的输入兼容性public abstract class InputHandler { public abstract Vector2 GetMovementInput(); public abstract bool GetFireInput(); public abstract bool GetSpecialAbilityInput(); } public class PCInputHandler : InputHandler { public override Vector2 GetMovementInput() { return new Vector2(Input.GetAxis(Horizontal), Input.GetAxis(Vertical)); } public override bool GetFireInput() { return Input.GetMouseButton(0) || Input.GetKey(KeyCode.Space); } public override bool GetSpecialAbilityInput() { return Input.GetKeyDown(KeyCode.Q) || Input.GetMouseButtonDown(1); } } public class MobileInputHandler : InputHandler { public override Vector2 GetMovementInput() { // 虚拟摇杆输入 return VirtualJoystick.Instance.Direction; } public override bool GetFireInput() { // 触摸屏射击按钮 return FireButton.Instance.IsPressed; } public override bool GetSpecialAbilityInput() { // 技能按钮 return AbilityButton.Instance.IsPressed; } }8. 实战案例塞壬清除者完整实现8.1 清除者控制器主类整合上述技术的完整实现public class SirenEliminatorController : MonoBehaviour { [Header(战斗参数)] public float maxHealth 10000f; public float currentHealth; public BossStateMachine stateMachine; [Header(组件引用)] public BulletPool bulletPool; public Collider2D hitCollider; public Animator animator; [Header(弹幕模式)] public BulletPattern[] phase1Patterns; public BulletPattern[] phase2Patterns; public BulletPattern[] phase3Patterns; private PerformanceProfiler profiler; private SpatialHashGrid spatialGrid; void Start() { currentHealth maxHealth; profiler new PerformanceProfiler(); spatialGrid new SpatialHashGrid(2f); InitializeStateMachine(); RegisterCollisionSystem(); } void Update() { profiler.StartTimer(BossUpdate); stateMachine.Update(); UpdateHealthState(); UpdateAIBehavior(); profiler.EndTimer(BossUpdate); } private void InitializeStateMachine() { stateMachine new BossStateMachine(); // 状态机初始化代码... } private void UpdateHealthState() { float healthPercentage currentHealth / maxHealth; if (healthPercentage 0.3f stateMachine.CurrentState ! BossState.Phase3) { stateMachine.ChangeState(BossState.Phase3); } else if (healthPercentage 0.6f stateMachine.CurrentState ! BossState.Phase2) { stateMachine.ChangeState(BossState.Phase2); } } public void TakeDamage(float damage) { currentHealth - damage; if (currentHealth 0) { stateMachine.ChangeState(BossState.Defeated); StartCoroutine(DefeatSequence()); } } private IEnumerator DefeatSequence() { // 击败动画和效果 yield return new WaitForSeconds(3f); gameObject.SetActive(false); } }9. 常见问题与解决方案9.1 性能问题排查问题现象游戏帧率在BOSS战时明显下降可能原因弹幕对象创建/销毁过于频繁碰撞检测计算量过大粒子特效数量过多AI决策逻辑过于复杂解决方案使用对象池管理弹幕和特效实现空间分割优化碰撞检测限制同时存在的粒子效果数量简化AI决策频率使用协程分帧处理9.2 内存泄漏排查问题现象游戏运行时间越长内存占用越高排查步骤使用Unity Profiler分析内存分配检查对象池是否正确回收对象确认事件订阅是否及时取消验证资源引用是否正确释放9.3 跨平台兼容性问题移动端特有问题触控输入响应延迟内存限制导致崩溃性能不足帧率下降优化策略简化弹幕数量和复杂度降低粒子效果质量使用移动端专用的LOD设置优化纹理和模型资源10. 最佳实践与工程建议10.1 代码架构规范模块化设计原则每个系统独立成模块便于测试和维护使用接口抽象不同实现依赖注入管理组件关系性能敏感代码规范避免在Update中频繁实例化对象使用静态方法减少GC压力预计算常用数值结果10.2 资源管理策略内存管理实现分级资源加载机制使用Addressable资源管理系统建立资源引用计数机制性能优化针对不同设备等级设置画质选项实现动态分辨率调整使用GPU Instancing优化渲染10.3 测试与调试自动化测试[TestFixture] public class BossBehaviorTests { [Test] public void TestPhaseTransition() { var boss new MockBossController(); boss.currentHealth boss.maxHealth * 0.5f; boss.UpdateHealthState(); Assert.AreEqual(BossState.Phase2, boss.currentState); } [Test] public void TestBulletPoolRecycling() { var pool new BulletPool(); var bullet1 pool.GetBullet(); var bullet2 pool.GetBullet(); pool.ReturnBullet(bullet1); var bullet3 pool.GetBullet(); Assert.AreEqual(bullet1, bullet3); // 应该回收利用 } }性能测试标准BOSS战场景维持60FPS以上内存占用稳定无持续增长加载时间控制在合理范围内不同设备上的兼容性验证通过本文的技术分析和代码示例开发者可以深入理解大型敌对单位的技术实现要点。在实际项目中建议根据具体需求调整技术方案重点关注性能优化和代码可维护性确保最终产品的质量和用户体验。

相关新闻

香港伴手禮購買全攻略:從機場到市區的伴手禮地圖

香港伴手禮購買全攻略:從機場到市區的伴手禮地圖

規劃一趟高效的香港手信購物之旅,關鍵在於了解各區域的品牌分布與交通路線。本攻略以「曲奇四重奏 Cookies Quartet」門市為核心錨點,搭配周邊購物資訊,為旅客提供一份從香港國際機場到市區的完整手信地圖。一、香港國際機場:手信…

2026/10/18 18:14:40 阅读更多 →
2026年RFID资产管理系统技术选型分析:主流方案功能对比与实施考量

2026年RFID资产管理系统技术选型分析:主流方案功能对比与实施考量

随着企业数字化转型不断深入,物联网技术在资产管理领域的应用日益广泛。RFID(射频识别)作为物联网感知层的核心技术之一,凭借非接触式读取、批量识别、远距离扫描等优势,正推动固定资产管理从人工盘点向自动化、智能化…

2026/10/18 9:19:41 阅读更多 →
工业通信RS232转RS485/422转换器:硬件设计、原理与工程实践全解析

工业通信RS232转RS485/422转换器:硬件设计、原理与工程实践全解析

1. 项目概述:从点到面的工业通信桥梁在工业自动化、楼宇自控或者一些老旧的工控设备现场,你肯定不止一次遇到过这样的场景:一台只有九针D型串口(也就是我们常说的RS232)的工控电脑或PLC,需要去连接几十米甚…

2026/10/17 17:19:27 阅读更多 →

最新新闻

变电站缺陷检测数据集全流程:从标注体检到YOLO训练部署

变电站缺陷检测数据集全流程:从标注体检到YOLO训练部署

简介:变电站设备缺陷图像数据集面向电力智能巡检与目标检测模型训练场景,收录8307张现场拍摄的jpg图像,覆盖避雷器破损、变压器渗油、开关柜异物、隔离开关锈蚀、互感器破损、接地线松动、绝缘子污闪、电缆沟盖板移位、小动物入侵、作业人员未…

2026/10/18 18:14:55 阅读更多 →
提示工程架构师:如何构建动态调整的情境感知提示系统

提示工程架构师:如何构建动态调整的情境感知提示系统

稍微整理一下语言和思路再重新输出。标题定的方向很好——“提示工程架构师”这个定位本身就说明,你不是来学怎么写一句咒语,而是来设计一套能应对复杂场景的提示系统。这篇文章我会尽量把动态调整和情境感知这两个核心概念拆透,把从理论到落…

2026/10/18 18:14:55 阅读更多 →
MySQL 第15章实战:变量、流程控制与游标在存储过程中的组合应用

MySQL 第15章实战:变量、流程控制与游标在存储过程中的组合应用

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

2026/10/18 18:14:55 阅读更多 →
Flutter鸿蒙跨平台迷宫实战:迁移踩坑与性能优化总结

Flutter鸿蒙跨平台迷宫实战:迁移踩坑与性能优化总结

鸿蒙设备生态起来之后,我一直在琢磨一件事:手里那份已经跑了几年的跨平台项目,到底怎么才能低代价地迁移过去,而不是从头再写一套界面。单纯的业务页面其实不难,难的是那种带算法、带图形、带复杂手势交互的小玩意儿。…

2026/10/18 18:14:55 阅读更多 →
WeKnora 源码部署实战:从零搭建可用的 RAG 知识库系统

WeKnora 源码部署实战:从零搭建可用的 RAG 知识库系统

简介:面向正在选型或准备本地部署腾讯开源WeKnora知识库的开发者、运维人员及RAG入门者,这份指南源码包以轻量HTML文档加配套配置文件的形式,给出了从环境准备、代码克隆、环境变量配置、服务启动到访问验证的完整参考路径,尤其适…

2026/10/18 18:14:55 阅读更多 →
智能体接入工程:大模型在金融交易中的安全可控实践

智能体接入工程:大模型在金融交易中的安全可控实践

实际上手之前我们都觉得,把大模型智能体接进金融交易流程,最难的应该是模型效果。结果等项目真正推下去才发现,模型本身的推理能力反而不是瓶颈,周围那圈工程才是真正决定生死的东西。这圈工程,在这个项目里我们内部叫…

2026/10/18 18:13:54 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →