Generi c классы в Unity3D - PullRequest
       4

Generi c классы в Unity3D

0 голосов
/ 15 апреля 2020

Я работаю над довольно большим проектом в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...