> ## Documentation Index
> Fetch the complete documentation index at: https://unity.farlocus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 语义差异

> Unity 资产的对象级差异视图与文本视图

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

<img src="https://mintcdn.com/farlocus/ZlI-W8lx6_9x2i0K/images/showcases/diff.png?fit=max&auto=format&n=ZlI-W8lx6_9x2i0K&q=85&s=6252cfa10439fe1e4f2a287c61920f7d" alt="img" width="1568" height="1058" data-path="images/showcases/diff.png" />

## 双视图

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_LocalPosition`、`m_LocalRotation` 相关的 YAML 上下文里找到 `y: 0` 变成 `y: 2.5` 的那一行，再顺着文块向上确认这段数据属于哪个物体。
* 语义 diff：直接显示该物体 Transform 组件位置字段的前后值，一眼可读。

## 原理

Locus 将差异两侧的 YAML 各自解析为 Unity 对象树，按对象在文件中的持久标识配对，再对配对的对象逐字段比较。展示的因此是「哪个对象的哪个字段从 A 变成 B」，而不是「第几行文本不同」：改动规模不影响可读性，GameObject 层级与组件归属也始终可见。

会话聊天中的文件变更预览、[资产页](/assets/browse-and-inspect)的资产检查使用同一套解析展示，三处看到的字段结构一致。
