问题:
在遍历修改预制体某个节点组件的情况下,会出现因为嵌套预制体导致重复添加。
在先遍历到预制体A时,A中的某一节点是嵌套的预制体B,当遍历到预制体B时上一次添加的多语言组件没有override上来,在预制体B添加组件,并且资源加载结束后,发现预制体组件A重复添加了多语言组件。
解决办法:
首先加载对应的预制体,注意不需要LoadAsset的方式加载然后实例化
GameObject prefab = PrefabUtility.LoadPrefabContents(prefabPath);
//此处去添加或者修改预制体
ReplaceTextInPrefab(prefab);
//保存预制体
PrefabUtility.SaveAsPrefabAsset(prefab, prefabPath);
// 卸载预制体的内容
PrefabUtility.UnloadPrefabContents(prefab);
在遍历预制体节点的时候,判断子节点是否属于嵌套预制体,如果是嵌套,则跳过
搜了好几种方式,目前发现只有下面这一种有效
if (PrefabUtility.GetCorrespondingObjectFromSource(textList[i].transform.gameObject) != null)
{
continue;
}