跳转到主要内容
Scene、Prefab 这类 Unity 资产以 YAML 文本序列化,编辑器里一次简单操作往往对应成片的行级改动,直接读文本 diff 很难看出到底改了什么。语义差异把 YAML 解析成 Unity 对象树,按对象和字段对比,以接近 Inspector 的方式展示结果。 img

双视图

Unity 资产的差异预览提供语义文本两个标签页:
  • 语义视图:左侧层级树列出发生变化的对象(新增、删除、修改分色标注),右侧按组件分组显示字段级的前后值。默认只显示有变化的字段,显示未变化字段可展开全部。
  • 文本视图:传统行级 diff,对照按钮切换上下排列与并排显示。核对 YAML 原文,或处理语义视图未覆盖的场景时使用。
大文件解析需要一点时间,加载进度按获取文件内容、计算差异、解析资源、构建语义模型四个阶段显示。

支持的资产类型

Scene(.unity)、Prefab(.prefab)、Material(.mat)、动画与动画控制器(.anim / .controller)、ScriptableObject 等 .asset 文件,以及物理材质、渲染纹理等其他以 YAML 序列化的资产。组件字段按 Inspector 中的分组展示,例如 Transform 的变换、ParticleSystem 的主模块 / 发射 / 形状。非 YAML 资产与二进制文件回退为文本 diff 或不提供预览。

一个对照例子

把 Prefab 里某个物体的位置从 (0, 0, 0) 移到 (0, 2.5, 0):
  • 文本 diff:先在十几行 m_LocalPositionm_LocalRotation 相关的 YAML 上下文里找到 y: 0 变成 y: 2.5 的那一行,再顺着文块向上确认这段数据属于哪个物体。
  • 语义 diff:直接显示该物体 Transform 组件位置字段的前后值,一眼可读。

原理

Locus 将差异两侧的 YAML 各自解析为 Unity 对象树,按对象在文件中的持久标识配对,再对配对的对象逐字段比较。展示的因此是「哪个对象的哪个字段从 A 变成 B」,而不是「第几行文本不同」:改动规模不影响可读性,GameObject 层级与组件归属也始终可见。 会话聊天中的文件变更预览、资产页的资产检查使用同一套解析展示,三处看到的字段结构一致。