Как получить GetComponentsInChildren для динамически определенного типа? - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть универсальный тип "Враг", который расширен многими другими классами.Таким образом, я могу сделать System.Type t = objectInQuestion.GetType(), чтобы определить, какой «тип» у конкретного «врага».Зная тип, я хочу найти область для этого конкретного типа.

Итак, я хочу сделать GetComponentsInChildren<t>().Я не могу просто выбросить возвращаемое значение t в скобки шаблона <t>.Как мне сделать это вместо этого?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Если кто-то не знает, как получить список напрямую с динамическим типом по желанию, я полагаю, что лучший обходной путь будет следующим:

Enemy[] enemies = someObject.GetComponentsInChildren<Enemy>();
foreach (Enemy e in enemies)
{
    if e.GetType() == objectInQuestion.GetType()
    {
        DoAThing(e); // Or add e to a list or whatever
    }
}
0 голосов
/ 17 декабря 2018

Не делай этого.Этот подход во многих отношениях плохвызовы обновлений замедляют работу и очень плохо масштабируются (будет работать хорошо для нескольких врагов в пуле)

Обход (разумные) ограничения компиляции AOT приведут к замедлению кода и еще большему объему памятиутечки

0 голосов
/ 17 декабря 2018

Вы должны использовать переключатель

    switch(objectInQuestion.GetType()){

       case typeof(TheClassYouWant):
       {
          GetComponentsInChildren<TheClassYouWant>();
          break;
       }

       case typeof(ADifferentClass):
       {
          GetComponentsInChildren<ADifferentClass>();
          break;
       }

       case typeof(AnEvenDifferentClass):
       {
          GetComponentsInChildren<AnEvenDifferentClass>();
          break;
       }
    }

Обратите внимание, что вы ДОЛЖНЫ поместить класс в typeof () при создании нового регистра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...