首先YAMLMerge工具其实并不局限于PlasticSCM,git也可以,它是内置在Editor内的一个更加智能的版本控制工具,只不过正常不会启用,他的目录在C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe(Unity Editor安装目录),MAC上:/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge。
为了使用YAML进行合并,要先设置序列化模式为强制文本(默认都是这个)。

打开Plastic SCM,选择 Preferences > Merge Tools,然后单击 Add 按钮->1.选择 External 合并工具->选择 Use with files that match the following pattern->添加 .unity (.prefab也可以,这里就不试了)扩展名->入以下命令:
"C:\Program Files\Unity\Hub\Editor\2021.3.3f1c1\Editor\DatalTools\UnityVAMLMerge.exe" merge -p "@basefile" "@sourcefile” "@destinationfile” “@output”
(前面的Editor目录替换成自己的就行了,双引号如果不好使用<C:\Program Files\Unity\Hub\Editor\2021.3.3f1c1\Editor\DatalTools\UnityVAMLMerge.exe>)

对参数-p的解释
-
Off:仅使用偏好设置中设定的默认合并工具而不进行智能合并。
-
Premerge:启用智能合并,接受纯净的合并(纯净的合并是指同一scene下对不同物体操作的合并,如果多个人同时对同一场景下同一物体操作还是会有冲突的)。不纯净的合并将创建文件的预先合并基础版本、他们的版本和我的版本。然后,对这些版本使用默认合并工具。
-
Ask:启用智能合并,但发生冲突时显示一个对话框让用户解决冲突(这是默认设置)。
测试
用分支合并来模拟多个人对同一个场景修改(切换账号太麻烦了)。
在主分支上新建一个场景添加两个空物体test1,test2,并创建他的子分支。

创建分支后当前工作区会变到子分支上,test1挂载一个脚本checkin。


将工作区切换回主分支,添加test上的脚本checkin。


现在主分支和子分支上的scene文件实际已经不一致了(一个对test1挂载了脚本,一个对test2挂载了脚本)。

正常合并会报错,但经过YAML的启用现在将子分支合并到主分支上。

检测到场景冲突,点击resolve coflict即可自动合并场景,同时可以添加批注。


这时候回到场景reload之后就可以发现Scene进行了合并(两次修改合并)。
