Как передать тип компонента в GetComponent?

Подскажите как сохранить тип класса в перкменную и передать его в GetComponent?

Потому что у меня есть switch в котором все одинаково в каждой строке, только меняется тип в GetComponent в зависимости от другой переменной...

switch (myValue)
{
   case 1: myGameObject.GetComponent<Class1>().Do();
   break;
   case 2: myGameObject.GetComponent<Class2>().Do();
   break;
}

На самом деле там немного больше кода в каждом кейсе, но суть вопроса понятна... Как исправить подобное дублирование кода?

Пытался что то типо:

System.Type type = typeof(Class1);
myGameObject.GetComponent<type>().Do();

И все в таком духе


Ответы (1 шт):

Автор решения: Yaroslav

И как он по твоему будет исполнять метод класса, непонятно какого типа, у которого он не обязательно должен быть?

public interface IDoSomething 
{
    void DoSomething ();
}

public class FooA : Monobehaviour, IDoSomething 
{
    public void DoSomething ()
    {
        //...
    }
}

public class FooB : Monobehaviour, IDoSomething 
{
    public void DoSomething ()
    {
        //...
    }
}

public class Foo : Monobehaviour
{
    private IDoSomething[] _do;  
    private int _doIndex;

    public void Start () 
    {
        _do = new IDoSomething[2];
        _do[0] = GetComponent<FooA>();
        _do[1] = GetComponent<FooB>();
    }

    public void Do ()
    {
        _do[_doIndex].DoSomething();
    }
}

Либо через абстрактный класс.

→ Ссылка