有时候在UI中大量使用了预制体A,但是由于某些原因需要将其中部分地方替换成预制体B,如果直接直接在UI中进行替换,在需要在每一个替换的地方加入预制体B然后调整位置、大小等多个属性值,删除旧的预制体A并且修改相关的引用,这样操作起来很费时。为了方便修改可以直接通过修改unity的.prefab文件方式进行。Unity的.prefab文件中保存了当前预制体内部所有组件的属性值及其层次结构,任何一个组件都对应有一个FID,该FID在当前预制体内部是唯一的,.meta文件保存了当前预制体的GUID,GUID是全局唯一的。结构类似于下图,
假设现在有一个常规字体预制体(GUID为5f3b4ccfac2310e4a83918146f3abf8f)及一个中等字体预制体(GUID为e3612cb130ff45a46be6e8064f27d919),现在需要将ToolButton预制体中使用的CoinAmountText常规字体引用改成中等字体引用,
则处理步骤如下,
使用记事本打开ToolButton.prefab文件,搜索名字CoinAmountText,找到相应的位置,如下,
可以看出此处有很多guid为5f3b4ccfac2310e4a83918146f3abf8f的地方,将当前PrefabInstance节点下面的所有5f3b4ccfac2310e4a83918146f3abf8f替换成e3612cb130ff45a46be6e8064f27d919,然后保存即可,一般节点以下面形式结束,
在替换时候一直替换到下一个PrefabInstance节点开始前或者文件最后,不要漏掉任何一个地方,否则该组件会在UI上无法正常显示。替换完成后可以看到字体发生了变化,也可以在CoinAmountText上右击找到对应的引用预制体,此时就会变成了替换后的。