如何为动态确定的类型获取GetComponentsInChildren?

时间:2018-12-16 20:39:59

标签: c# unity3d

我有一个通用类型“ Enemy”,该类型被许多其他类扩展。因此,我可以System.Type t = objectInQuestion.GetType()来确定特定“敌人”是什么“类型”。知道类型后,我想在一个区域中搜索更多该特定类型。

所以我想做一个GetComponentsInChildren<t>()。但是,我不能简单地将t的返回值放入模板括号<t>中。我该怎么做呢?

谢谢!

3 个答案:

答案 0 :(得分:2)

除非有人知道一种根据需要直接使用动态类型来获取列表的方法,否则我认为最好的解决方法如下。

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
    }
}

答案 1 :(得分:1)

您必须使用开关

    switch(objectInQuestion.GetType()){

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

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

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

请注意,在创建新案例时,必须将类放在typeof()中。

答案 2 :(得分:0)

不要这样做。这在很多方面都是不好的方法

  • GetComponent s inChildren将分配/泄漏内存

  • 在ai更新调用中嵌套这样的代码会使它变慢并且扩展性很差(将对池中的少数敌人有效)

  • 解决AOT编译的(合理)限制会导致代码变慢甚至更多的内存泄漏

相关问题