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

最近在做本地化功能,需要遍历所有UI预制体,将含有中文的Text或者LText组件中含有中文的都新增多语言文本组件,并赋值对应的多语言id;

发现在先遍历到预制体A时,A中的某一节点是嵌套的预制体B,当遍历到预制体B时上一次添加的多语言组件没有override上来,在预制体B添加组件,并且资源加载结束后,发现预制体组件A重复添加了多语言组件。

解决办法:

搜了好几种方式,目前发现只有下面这一种有效

if (PrefabUtility.GetCorrespondingObjectFromSource(textList[i].transform.gameObject) != null)
{
          continue;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中,可以使用PrefabUtility类来获取未实例化的GameObject预制体上的组件。 下面是一个简单的示例,演示如何获取未实例化的GameObject预制体上的组件: 1. 首先,打开Unity编辑器并创建一个新场景。 2. 在项目视图中创建一个新的预制件。 3. 选择预制件并在Inspector视图中添加一个新组件。例如,您可以添加一个名为“TestComponent”的C#脚本。 4. 在TestComponent脚本中添加以下代码: ``` using UnityEngine; public class TestComponent : MonoBehaviour { public int testValue = 0; } ``` 5. 然后,将预制件拖动到场景中。 6. 选择预制件并在Inspector视图中更改TestComponent的testValue属性。例如,您可以将其设置为5。 7. 打开脚本编辑器并创建一个新的C#脚本。将以下代码添加到脚本中: ``` using UnityEngine; using UnityEditor; public class GetPrefabComponent : MonoBehaviour { public GameObject prefab; void Start() { TestComponent testComponent = PrefabUtility.GetPrefabAssetType(prefab) == PrefabAssetType.Regular ? PrefabUtility.GetPrefabInstanceHandle(prefab).GetComponent<TestComponent>() : null; if (testComponent != null) { Debug.Log("TestComponent testValue: " + testComponent.testValue); } else { Debug.Log("TestComponent not found on prefab"); } } } ``` 8. 在场景中创建一个新的空对象,并将GetPrefabComponent脚本添加到该对象上。 9. 在GetPrefabComponent脚本组件中,将prefab属性设置为您创建的预制件。 10. 您现在可以运行场景,并查看控制台中的输出。如果一切正常,您应该会看到以下消息: ``` TestComponent testValue: 5 ``` 这表明您成功获取了未实例化的GameObject预制体上的TestComponent组件,并检索了其testValue属性。 希望这个示例能够帮助您了解如何在Unity中获取未实例化的GameObject预制体上的组件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值