Unity中往节点上添加组件,因嵌套预制体而导致重复添加组件

在实现本地化功能过程中,遇到一个问题:遍历所有UI预制体添加多语言支持时,由于预制体的嵌套关系导致组件重复添加。解决方案是检查当前游戏对象是否来源于其他预制体,如果存在则跳过,防止重复处理。使用PrefabUtility.GetCorrespondingObjectFromSource方法进行判断有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

在遍历修改预制体某个节点组件的情况下,会出现因为嵌套预制体导致重复添加。

在先遍历到预制体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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值