介绍

可以使用 Unity 创建生成许多资源,包括 Prefab、场景、动画控制器、材质等等。

而这些资源也是有版本号的,如果使用 Force Text 选项使用文本保存资源后,可以看到每一个对象都有一个自己的版本号。

在升级 Unity 后,通常这些版本号会发生变化,再次修改资源时 Unity 会使用新版本保存资源,导致产生大量差异,掩盖了实际的改动。

比较好的一种方式是在 Unity 升级后,手动升级所有资源版本,这样之后的改动就不会产生巨大的差异了。

环境

  • Unity 5.6.6f2

原理

因为只需要升级版本,那么最简单的方法是读取资源、设置资源的脏标记、触发 Unity 保存。

Prefab

1
2
3
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefab.prefab");
EditorUtility.SetDirty(prefab);
AssetDatabase.SaveAssets();

注意:Unity 2017 及之后的版本 Prefab 编辑器接口发生了变化,不再使用 EditorUtility.SetDirty() 方法。

场景

1
2
var scene = EditorSceneManager.OpenScene(path, OpenSceneMode.Single);
EditorSceneManager.SaveScene(scene)

直接打开场景然后保存即可。

meta 文件

1
2
3
4
5
6
var importer = AssetImporter.GetAtPath(path);
if (importer != null)
{
    importer.userData = "";
    importer.SaveAndReimport();
}

可以将没有使用过的用户字段直接置空后重新导入,即可刷新 meta 文件。

其他

基本上与 Prefab 类似,读取后设置脏标记再保存即可。