У меня есть приложение Unity C#, где каждая игра внутри имеет один абстрактный контроллер. Он наследуется от другого класса, позволяя ему получить доступ, как статическая версия базового поведения в единстве.Поиск и запуск универсального класса?
public class AbstractController<T> : SingletonMonoBehavior<T> {
virtual public void Begin() {
//startup code here
}
}
Итак, чтобы найти этот класс, я должен знать, что такое T. Нужно ли мне размышлять об этом? Или я могу просто сохранить типы T в списке где-нибудь и получить доступ к ним динамически? Прямо сейчас, у меня есть словарь названий игр и классов, которые наследуют от абстрактных контроллеров - так что я знаю, что T должно быть, но когда я делаю это:
_controllerTypes = new Dictionary<GameScene, Type>();
_controllerTypes.Add (GameScene.FrogJump, typeof(FJGameController));
Type T = _controllerTypes [_startScene];
AbstractController<T>[] controllers = GameObject.FindObjectsOfType<AbstractController<T>>();
Я получаю ошибку компилятора о том, что Msgstr "Тип или имя пространства имен` T 'не найдено. " Есть ли способ разработать вокруг этого? Я не хочу использовать рефлексию, но я хочу, чтобы она была красивой.
Итак, вам нужен тип T в функции? – devRicher
Добавлено больше вопросов на вопрос - спасибо! – Catlard
Сингелтоны и их неотъемлемость не смешиваются. Я бы порекомендовал просто сбросить «SingletonMonoBehavior» и либо использовать обычное «MonoBehavior» для объекта, который загружается в сцену предварительной загрузки, или даже лучше использовать ['ScriptableObject'] (https://www.youtube.com)./watch? v = VBA1QCoEAX4 & list = PLX2vGYjWbI0RtPoeDoBUPnwY8USGra-pD & index = 49) для представления общего состояния. –