Я работаю над довольно большим проектом в Unity и столкнулся с большой проблемой, которая не позволяет мне продолжать его.
У меня есть класс, который управляет Layout в моем пользовательском интерфейсе, и это его определение :
public abstract class LayoutController : UIBehaviour { … }
И, конечно, конкретные классы:
public class HorizontalLayoutController : LayoutController { … }
public class VerticalLayoutController : LayoutController { … }
И теперь моя проблема в том, что у меня есть этот базовый класс, который использует одну из реализаций макетов:
public class MenuController : MonoBehaviour
{
public LayoutController layoutController;
public void SetParameters(…)
{
// settings layout parameters
}
}
Проблема в том, что каждый макет имеет свои уникальные настройки, поэтому эта реализация не помогает.
В обычной программе я использовал бы обобщенные значения, например:
public class MenuController<LayoutType> : MonoBehaviour where LayoutType : LayoutController
{
public LayoutType layoutController;
public void SetParameters(MenuSettings<LayoutType> typeSettings)
{
// settings layout parameters
}
}
Но Unity не сериализует generi c, поэтому он не будет работать.
Я знаю, что могу создать пустой класс для каждого типа
public class HorizontalMenuController : MenuController<HorizontalLayoutController>{}
Но этот контроллер меню имеет подпрограмму классы, что означает, что я получаю взрывы класса. (Я уже создал много пустых классов из-за этой проблемы, и на данный момент код выглядит ужасно и неуправляемо)
Есть ли решение этой проблемы?
Я использую Unity 2018.4.20 LTS