我有一个通用类型“ Enemy”,该类型被许多其他类扩展。因此,我可以System.Type t = objectInQuestion.GetType()
来确定特定“敌人”是什么“类型”。知道类型后,我想在一个区域中搜索更多该特定类型。
所以我想做一个GetComponentsInChildren<t>()
。但是,我不能简单地将t
的返回值放入模板括号<t>
中。我该怎么做呢?
谢谢!
答案 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编译的(合理)限制会导致代码变慢甚至更多的内存泄漏