Несколько выпусков:
1 . GameObject[] allObjectsInMain = currentMain.GetComponentInChildren
Функция GetComponentInChildren
используется для получения одного компонента из GameObject. Попытка заставить его вернуть массив или несколько объектов вызовет исключение.
2 . currentMain.GetComponentInChildren<List<GameObject>>(false);
Вы не можете передать GameObject
в функцию GetComponentInChildren
, потому что GameObject отличается от компонента. Компоненты присоединяются к GameObjects, а функции GetComponentXXX
возвращают только компоненты, а не GameObject. Отсюда ключевое слово компонента в нем.
Также вы не можете передать ему List
. Единственное, что нужно передать этой функции - это компонент или сценарий, который наследуется от MonoBehaviour
, interface
или любого встроенного компонента, такого как Rigidbody
.
Используйте функцию GetComponentsInChildren
с s
. Это возвращает несколько объектов. Также передайте ему Transform
, так как Transform
является компонентом, и каждый GameObject в сцене имеет компонент Transform
, его можно использовать для поиска всех дочерних объектов.
int CountChildObjectsByTag(GameObject parent, string tag)
{
int childCount = 0;
Transform[] ts = parent.GetComponentsInChildren<Transform>();
foreach (Transform child in ts)
{
if (child != parent.transform && child.CompareTag(tag))
childCount++;
}
return childCount;
}
Еще лучше, просто перебрать transform
. Теперь вам не нужно использовать GetComponentsInChildren
или возвращать массив каждый раз, когда вызывается эта функция.
int CountChildObjectsByTag(GameObject parent, string tag)
{
int childCount = 0;
foreach (Transform child in parent.transform)
{
if (child.CompareTag(tag))
childCount++;
}
return childCount;
}
Использование:
GameObject currentMain = GameObject.FindGameObjectWithTag("MainCamera");
int childCount = CountChildObjectsByTag(currentMain, "High");