Для получения списка всех компонентов, которые прикреплены к GameObject, вы можете просто использовать ( Source )
GetComponents(typeof(Component));
Чем для проверки компонентовтипы / имена типов, которые вы можете использовать Regex для поиска определенных совпадений, не проверяя полное имя.
В общем случае рекомендуется использовать switch - case
вместо if - else
, если вы проверяете только одну переменную для различных значений, поскольку это намного эффективнее.
К сожалению, это не работает для сравнения типов, таких как
var Type = component.GetType();
// can not use switch for that
if(Type == typeof(MyFirstClass)) // ... etc
Но вы можете использовать Regex для сопоставления определенной части имени типа, используя, например,
var components = GetComponents(typeof(Component));
foreach(var component in components)
{
var Type = component.GetType();
var TypeName = Type.Name;
// Matching types starting with My
if( Regex.IsMatch(TypeName, "My.*"))
{
// ....
}
}
(Для написания и тестированияregex Я рекомендую https://regexr.com)
Или вы можете использовать switch - case
для сопоставления полных имен типов, таких как
foreach(var component in components)
{
var Type = component.GetType();
var TypeName = Type.Name;
switch(TypeName)
{
case "MyFirstClass":
// ...
break;
case "MySecondClass":
// ....
break;
//.... etc
default:
// Nothing matched
return;
}
}
В отличие от оператора if - else if - else
, swith - case
не теряет производительностьс большим количеством случаев, так что даже если есть много имен для проверки, это может быть лучшим подходом.