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

Заявка на разбор тестовых https://forms.gle/kqVPv1jWT97Bkps9A
Download Telegram
#архитектура #prefab #view
Приветствую, друзья!
👋

По результатам голосования за выбор темы публикации между "Организацией префабов и роли слоя view в ней" и "CI/CD в игровой разработке" с результатом 57% победу одержали префабы.
Поэтому сегодня говорим про организацию префабов и роль слоя view в ней.

Начнем с организации.

Организация префабов в Unity - важный аспект процесса разработки игры.

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

Советы по организации префабов:

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

- Именование префабов
Имя префаба должно отражать его суть.
Ясные и понятные имена для каждого префаба позволяют легче его идентифицировать и искать.

- Использование тегов
Unity позволяет назначать теги для объектов, включая префабы.
Это упрощает поиск в больших проектах.
Назначение одного и того же тега нескольким префабам, позволит сгруппировать их вместе.

- Использование переменных
Используйте переменные для определения свойств префабов.
Например, переменная для определения здоровья игрового персонажа или скорости движения.

- Обновление префабов
При обновлении префаба, задействованного в сцене, убедитесь, что изменения не нарушит логику игры.
Например, если вы обновляете префаб игрового персонажа, убедитесь, что изменения не приведут к проблемам с анимацией или поведением персонажа.

- Переиспользование префабов
Будет полезно, если вы хотите создать множество однотипных объектов.
Например, при создании уровня, который включает множество блоков, можно создать префаб блока и использовать его для всех блоков в уровне.

Переиспользование префабов может значительно упростить процесс разработки игры в Unity, поскольку это позволяет использовать один раз созданный объект в разных частях игры.

Советы по правильному переиспользованию префабов:

- Универсальность
Если планируется использование префаба в разных сценах игры, сделайте его универсальным для всех этих сцен.
Например, если вы создаете префаб здания, которое будет использоваться в разных уровнях игры, убедитесь, что он подходит для любого уровня, не только для текущего.

- Настраиваемость
Префабы могут быть настроены для изменения свойств в режиме редактирования Unity.
Например, вы можете создать префаб игрового персонажа и настроить его для разных типов персонажей, таких как главный герой, противники и т.д.
Это может упростить процесс создания игровых объектов в будущем.

- Версионнирование
Если вы обновляете префаб, который уже используется в игре, убедитесь, что новая версия не повлияет на уже созданные объекты.
Хорошей практикой является создание новых версий префаба с новым именем и обновление ссылок на них в игре.

- Документирование
Хорошей практикой является документирование использования префабов, чтобы другие члены команды знали как и могли легко использовать их в своей работе.

- Тестирование
Перед тем, как использовать префаб в игре, убедитесь, что он работает правильно.
Протестируйте его в разных условиях и убедитесь, что он работает корректно.

Продолжение 👇
👍61
#архитектура #prefab #view
Продолжение
Роль слоя view в префабах 👇

View - наследник MonoBehaviour.
Его роль в организации префабов заключается в разделения ответственности между слоями представления и бизнес-логики.
Такой подход упрощает поддержку кода и делает его более гибким и масштабируемым.
View отвечает за отображение данных в игровом мире и может сообщать о них, также реагирует на изменение данных в pm.
Возможность реагировать на изменение данных в pm, отслеживать их и вызывать команды из слоя представления достигается через использование реактивных объектов, таких как ReactiveProperty или ReactiveCommand, помогает обеспечить правильное взаимодействие между слоями, упростить тестирование и отладку кода.

ReactiveProperty - это реактивный объект, который автоматически оповещает все подписанные на него объекты об изменении своего значения.
Он может использоваться для отслеживания изменений свойств.
Например, текущего здоровья игрока или его координат на карте.

ReactiveCommand - это реактивный объект, который представляет собой команду, которую можно вызвать.
Он позволяет разделять ответственность между слоем представления и pm, так как view не знает, что происходит за его пределами.
Например, при нажатии на кнопку "атаковать" в интерфейсе игрока, ReactiveCommand вызывает метод pm, который обрабатывает эту команду.

Кроме того, использование view позволяет легко настраивать префабы и создавать новые визуальные элементы, не затрагивая при этом pm.
Например, можно добавить новый элемент интерфейса, который будет отображать текущую скорость игрока, и при этом не вносить изменений в pm.

Правила организации префабов с помощью View:
1. Каждый префаб должен иметь свой рутовый GameObject, на который необходимо повесить класс view.

2. В классе view необходимо явно прописать набор зависимостей
Набор зависимостей заполняем перетаскиванием. Они будут представлять собой другие GameObject'ы из иерархии префаба, необходимые для корректного отображения данных.
Например, у игрока может быть HpBar, который является дочерним объектом рутового GameObject'а, на котором также висит свой view класс.
Пример из Unity

3. В каждом классе view должен быть публичный метод SetCtx.
SetCtx вызывается при инициализации view через код в классе entity, после инстанцирования префаба.
Данный метод принимает контекст (обычно это структура) в виде зависимости.
Пример кода
Контекст должен содержать все необходимые зависимости для работы view.
Например, текущее здоровье игрока или его координаты на карте, реактивные объекты, контент.
Пример кода

‼️ Контекст view не должен содержать: context, entity, pm, view, content, state, так как в таком случае вы усилите зацепление.

Таким образом, использование view в организации префабов является важным элементом архитектуры Unity-проектов, который позволяет разделять ответственность между view и pm, упрощает поддержку и расширение кода и делает проект более гибким и масштабируемым.
🔥6👍5🤔4