Как стать автором
Обновить
1
0
Алексей @Darkirius

Technical Lead

Отправить сообщение
Я так понимаю вы просто не согласны с этой статьёй: habrahabr.ru/post/270005. А также Вы исключили возможность использовать данный пример кода как единую входную точку. Попробуйте оценить этот код с точки зрения: инициализация самого проекта.
1. Да я согласен про велосипед, но речь идет о применении Singleton.
2. Как я понимаю мы обсуждаем работу в рамках Unity3D и желательно видеть результат в инспекторе, а не просто выводить в лог.
3. Данный код позволяет повесить класс на объект и управлять классом через инспектор, а то что предлагаете Вы, не позволяет сделать визуальный дебаг класса.
Идея данного кода состоит в том, что он срабатывает первым и создает окружение вокруг себя, это своего рода единая точка входа. Соответственно все что сработает в Awake/OnEnable получит доступ к данному коду.
Хочется спросить, а чем плохо использовать Singleton по аналогии с DI? Для Unity3D это очень удобный подход. Создаем класс GameManager и прописываем в нем ссылки на нужные объекты (классы), после чего создаем объекты (классы).

Например:
<code>
public GameSettings GameSettings { get; private set; }
public ConfigController ConfigController { get; private set; }
public KeyboardController KeyboardController { get; private set; }
public IFormDetector FormDetector { get; private set; }
public DepthTracker DepthTracker { get; private set; }
public GameController gameController { get; private set; }

void Start ()
{
    GameSettings = Resources.Load("GameSettings") as GameSettings;
    ConfigController = this.transform.GetOrAddComponent<ConfigController>();
    KeyboardController = this.transform.GetOrAddComponent<KeyboardController>();
    FormDetector = this.transform.GetOrAddComponent<PixelCompare>();
    DepthTracker = this.transform.GetOrAddComponent<DepthTracker>();
    gameController = this.transform.GetOrAddComponent<GameController>();
}
</code>


А если ещё и добавить puplic static с возвратом объекта(класса), то можно получить ещё и короткие ссылки.

Например:
<code>
public static GameController GetGameController()
{
    return GameManager.Singleton.gameController;
}
</code>


Вот и получилось элегантное решение и возможно вызвать в любой момент GameManager.GetGameController().

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность