Foreach vs. за l oop в получении детей (их скрипты) - PullRequest
0 голосов
/ 27 мая 2020

Я только что столкнулся с чем-то странным в Unity / c#. По какой-то причине следующий foreach l oop

foreach (Fade_in fade in animRotate.GetComponentsInChildren<Fade_in>())
{
    fade.delayInSeconds = 1f;
}

не работает. Однако, если я попытаюсь добиться того же с помощью for l oop вместо

for (int i = 0; i < animRotate.transform.childCount; i++)
{
    animRotate.transform.GetChild(i).GetComponent<Fade_in>().delayInSeconds = 1f;
}

, это сработает. Может кто-нибудь объяснить мне, почему? Функция foreach l oop не показала ошибку или что-то в этом роде, просто не изменила значение с плавающей запятой.

1 Ответ

0 голосов
/ 27 мая 2020

Функция GetComponentsInChildren возвращает все компоненты Type типа в GameObject или любом из его дочерних элементов.

У вас есть 2 способа получить все компоненты без него. GameObject:

  1. Используйте GetComponentsInChildren с includeInactive = false:
foreach (Fade_in fade in animRotate.GetComponentsInChildren<Fade_in>(false))
{
    fade.delayInSeconds = 1f;
}
Используйте функцию cast (transform.Cast<Transform>().ToArray()):
foreach (Fade_in fade in animRotate.transform.Cast<Fade_in>().ToArray())
{
    fade.delayInSeconds = 1f;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...