跳转到内容

v0.10.0

MCP Server:AI 辅助编辑器集成

Estella 现在内置 MCP(Model Context Protocol)桥接器,允许 Claude 等 AI 助手直接与运行中的编辑器交互。桥接器自动启动,提供全面的 API:

  • 场景检查:读取实体层级、组件数据、资产列表
  • 实体操作:创建、删除、重命名、重新父级实体;添加/移除组件
  • 属性编辑:修改组件属性,完整支持撤销
  • 时间轴控制:读写时间轴数据,控制播放
  • Play 模式:启动/停止/暂停 Play 模式,调整播放速度
  • 资产管理:读写资产文件,管理资产元数据

独立的 MCP 服务器(tools/mcp-server/)封装了桥接器,可与任何 MCP 兼容客户端配合使用。

时间轴:AnimFrames 帧轨道

新增 animFrames 轨道类型,将精灵帧显示为时间轴上带颜色、可调整大小的色块。每帧有独立的时长,可通过拖拽色块边缘调整,实现对帧时序的精细控制。

实时播放头同步

进入 Play 模式时,时间轴自动切换到 LIVE 模式:播放头实时跟踪运行时动画位置(以 60fps 从 C++ 时间轴系统轮询)。工具栏显示红色闪烁的”LIVE”指示器。LIVE 模式下编辑器播放控件被禁用,退出 Play 模式后恢复。

时间轴编辑改进

  • 多选关键帧:Ctrl+点击切换选择、Shift+点击范围选择、框选
  • 批量操作:批量移动或删除选中的关键帧,作为单次撤销步骤
  • 插值预设:右键关键帧可应用 Linear、EaseIn、EaseOut、EaseInOut 或 Step
  • 标记与事件轨道:新增标记和自定义事件轨道类型
  • 网格吸附:工具栏切换网格吸附;拖拽时关键帧吸附到网格线
  • 播放控制:逐帧前进/后退、速度控制(0.25x–4x)、循环模式切换(Once/Loop/PingPong)
  • 时长编辑:双击时间显示可编辑总时长
  • 轨道管理:拖拽排序、右键重命名/删除、类型颜色标识

物理:关节、射线检测与查询

关节类型

五种关节类型可用于连接物理体:

  • Distance Joint:保持两个物理体之间的固定距离
  • Revolute Joint:围绕共享锚点的铰链旋转,支持可选马达和角度限制
  • Prismatic Joint:沿轴线线性滑动,支持可选马达和平移限制
  • Weld Joint:将两个物理体刚性绑定
  • Wheel Joint:组合旋转和平移行为,适用于车辆悬挂

空间查询

  • 射线检测:在物理世界中投射射线,获取所有命中结果(碰撞点、法线、距离、实体)
  • 重叠查询:用圆形测试世界中的重叠物理体
  • 复合形状:在单个物理体上附加多个碰撞形状

编辑器集成

新增物理编辑器插件,可在 Inspector 中直接可视化配置关节和形状。

Spine:混合、事件与 IK

  • 动画混合:Spine 动画之间可配置混合时长的交叉淡入淡出
  • 事件系统:通过 SpineModuleController 监听 Spine 动画事件(start、end、complete、custom)
  • 附件控制:通过 SpineController 在运行时显示/隐藏插槽和替换附件
  • IK 约束:在 Spine 骨架中配置反向动力学约束
  • 插槽颜色:以编程方式为单个 Spine 插槽着色

性能改进:

  • 多相机渲染时缓存网格提取结果
  • 网格分配每帧最多批处理为 2 次
  • 变换矩阵计算移至 C++ 以减少开销

Tilemap:动画瓦片与等距视角

  • 动画瓦片:瓦片可引用自动播放的动画序列
  • 瓦片属性:访问 Tiled 中定义的自定义瓦片属性
  • 翻转与旋转:瓦片支持水平/垂直翻转和 90 度旋转
  • 等距网格:支持等距瓦片地图渲染
  • 调试可视化:切换瓦片地图网格覆盖层用于调试
  • Tilemap API:新增 tilemapAPI 模块用于运行时瓦片操作(setTile、getTile、fillRect 等)

锚点支持

精灵现在支持可配置的锚点(pivot),影响旋转、缩放和定位。编辑器在 Scene View 中显示可拖拽的锚点覆盖层。边界计算考虑非中心锚点。

编辑器改进

  • 资产选择对话框:可复用的资产选择模态框,支持按类型筛选、网格预览和搜索
  • 设置验证:项目设置现在基于 JSON Schema 验证,提前暴露配置错误
  • 改进的检查器:AnimClip 和 BitmapFont 检查器重新设计,UX 更佳
  • 内容浏览器:资产网格支持额外的预览模式

引擎内部

  • C++ Registry 新增实体销毁清理钩子
  • 混合状态从文件级静态变量移至 RenderCommand 类成员
  • 物理和 Spine 全局状态封装为上下文结构体
  • App.physicsInitPromise 用于等待异步物理初始化