GameDev: разработка на Unity3D
445 subscribers
6 photos
2 videos
7 files
40 links
Все для успешного развития разработчика в геймдев: от junior до CTO. SOLID на практике, IOC, DI. Новые паттерны для gamedev. Личный опыт.

Заявка на разбор тестовых https://forms.gle/kqVPv1jWT97Bkps9A
Download Telegram
#monobehaviour #архитектура

Приветствую, друзья 👋

Сегодняшняя публикация посвящена роли MonoBehaviour в проекте.

MonoBehaviour - это базовый класс в Unity, который используется для написания скриптов, управляющих поведением игровых объектов.
Он предоставляет множество методов жизненного цикла, которые могут быть переопределены для реализации логики игровых объектов.

Некоторые из основных методов, используемые в жизненном цикле объекта, включают в себя:
- Awake(): вызывается при создании объекта после инициализации всех его компонентов, но до того, как он станет активным в иерархии сцены.

- Start(): вызывается после Awake() и до первого обновления фрейма.
В методе можно инициализировать переменные и компоненты, которые зависят от других объектов в сцене.

- Update(): вызывается каждый кадр и используется для обновления поведения объекта.
В методе можно изменять свойства объекта, перемещать его, обрабатывать ввод и т.д.

- FixedUpdate(): вызывается с фиксированной частотой и используется для обновления физики объекта.
Метод должен использоваться всякий раз, когда вам нужно изменять физические свойства объекта, такие как скорость, позиция, силы и т.д.

- LateUpdate(): вызывается после того, как все объекты обновили свои позиции в текущем кадре.
Метод полезен, когда необходимо обновить объект, исходя из его новой позиции после обновления других объектов.

- OnEnable(): вызывается, когда объект становится активным в иерархии сцены.
- OnDisable(): вызывается, когда объект становится неактивным в иерархии сцены.
- OnDestroy(): вызывается перед уничтожением объекта.

В дополнение к методам, MonoBehaviour имеет свойства, ниже некоторые из них:
- transform - для доступа к компоненту Transform объекта,
- gameObject - для доступа к объекту, на котором находится компонент
- и многие другие, которые позволяют получить доступ к различным свойствам и компонентам объекта.

С помощью MonoBehaviour можно реализовать множество функций, например:
- управление движением объектов,
- обработка столкновений,
- взаимодействие с пользователем и многое другое.

На практике разработчики часто смешивают слои бизнес-логики, представления и контента в наследнике MonoBehaviour.
Такое смешение является плохой практикой по нескольким причинам:

1. Нарушение принципа единственной ответственности (SRP).
Каждый класс должен быть ответственным только за одну вещь, и смешение различных слоев функциональности в одном классе приводит к необходимости поддерживать несколько ответственностей одновременно.
Это усложняет код и его тестирование, увеличивает количество ошибок.

2. Сложность переноса и интеграции кода.
Когда вся функциональность приложения сосредоточена в наследнике MonoBehaviour, усложняется перенос в другую среду или интеграции с другими проектами.
Разделение функциональности на различные классы и слои позволяет легче переносить код и переиспользовать его.

3. Сложность тестирования.
Когда код приложения находится в одном монолитном классе, усложняется тестирование. Возникает необходимость создания сложных тестовых сценариев для проверки функциональности, что ведет к росту времени и увеличивает вероятность возниконовения ошибок.

4. Нарушение принципа разделения интерфейса и реализации (ISP).
Классы должны предоставлять только те методы и свойства, которые необходимы для работы с ними, а не всю функциональность приложения.
Смешение различных слоев функциональности в одном классе нарушает ISP и делает код менее гибким и модульным.

5. Усложнение поддержки кода.
Смешение различных слоев функциональности в одном классе делает код менее читабельным и понятным для других разработчиков.
Это усложняет поддержку и дальнейшее развитие приложения.

6. Трудности в отслеживании состояния объектов и их взаимодействия друг с другом.
Часто компоненты MonoBehaviour создаются и удаляются динамически в зависимости от событий в игре, подобное использование MonoBehaviour может сделать код менее гибким и менее управляемым.

Продолжение 👇
🔥4👍1
#monobehaviour #архитектура

Продолжение Роль MonoBehaviour в проекте 👇

Что же является хорошей практикой?
Хорошей практикой является использование MonoBehaviour в качестве слоя View в Unity проекте.

Несколько правил, которые сделают использование данного класса эффективным:
1. Разделяйте логику и представление:
MonoBehaviour должен использоваться только для отображения объектов на сцене

2. Разделяйте игровые логики в отдельные классы:
Все игровые логики должны быть разделены в отдельных классах. Это обеспечит легкость понимания кода и возможность повторного использования
ℹ️ исключение может составлять логика, которая используется для работы самого представления.

Вопросы в комментариях приветствуются!

Лёгкой и продуктивной недели 💪
👍41