GetComponentsInChildren by name



我正在寻找通过他们的名字获取ComponentsInChildren的最佳方式。情况是这样的,在我的游戏对象中,我有几个游戏对象,它们的名称都相同。

我想通过搜索名称然后更改它们的材料来访问所有这些。更改材料部分已经在代码中进一步完成。

gameobject.GetComponentInChildren<Transform>().Find(Name).GetComponent<MeshRenderer>().material = newMaterial;

上面的代码用于获取其中一个游戏对象并更改材质。我的问题是如何获取所有游戏对象并更改材料。

(游戏对象的数量并不总是相同)

就像你现在所拥有的那样,它没有什么意义。

  • GetComponentInChildren只返回一个对象 ->调用它相同,因为GetComponentInChildren也会在自身上查找组件!
  • Find再次只返回一个嵌套在该对象下方的单个对象。

为什么还要使用GetComponentInChildren<Transform>,而您以后还是想要一个MeshRenderer参考?


我认为您要做的是获取所有MeshRenderer组件,然后按名称过滤它们。

foreach(var meshRenderer in gameobject.GetComponentsInChildren<MeshRenderer>(true))
{
if(meshRenderer.name == Name)
{
meshRenderer.material = newMaterial;
}
}

请注意GetComponentsInChildren-> 中的s这将返回嵌套在此对象下的所有MeshRenderer引用(包括此对象)。通过将true作为参数传入,这还包括非活动游戏对象和禁用的组件。


你也可以使用 LinqWhere

foreach(var meshRenderer in gameobject.GetComponentInChildren<MeshRenderer>(true).Where(meshRenderer => meshRenderer.name == Name))
{
meshRenderer.material = newMaterial;
}

最新更新