Атомарный подход – это удобная концепция, в которой легко разрабатывать механики игровых объектов. Благодаря принципу разделения данных и логики, можно легко переиспользовать поведение и описывать игровые объекты декларативно, при этом оставаясь в парадигме ООП. Поэтому это хорошая альтернатива ECS, которую было бы полезно изучить и взять себе на вооружение Спойлер: Программа курса Модуль I. Атомарный подход Урок #1 Вводный урок Цель занятия: определить формат обучения Описание: Познакомимся друг с другом и с программой курса, рассмотрим формат обучения, проверку и сдачу домашних заданий. Изучим организацию проекта и файловую систему, разберем конвенции нейминга классов и код-стайла Урок #2. Принцип разделения данных и логики Цель занятия: Научиться применять принцип разделения данных и логики для повторного использования игровых механик. Описание: Реализуем поведение персонажа и пули. Рассмотрим переиспользование механики перемещения. Домашнее задание: реализовать механику стрельбы пулями для персонажа по кулдауну Урок #3. Структура игрового объекта Цель занятия: Научиться описывать игровые объекты декларативно Описание: Поговорим про основные слои объекта: model & view, и почему важно их разделять. Также разберемся, чем отличаются секции от компонентов в атомарном подходе и реализуем анимации, звуки и VFX Урок #4. Групповое задание Цель занятия: Закрепить полученные знания по атомарному подходу Групповое задание: Реализовать зомби с механикой ближнего боя на атомарном подходе. Лучшая команда получит пиццу Домашнее задание: реализовать конвертер ресурсов на атомарном подходе Урок #5. Полиморфизм игрового объекта Цель занятия: научится работать с игровыми объектами разного типа. Описание: Поговорим, про проблематику использования классического полиморфизма. Разберем понятия статической и динамической типизации. Реализуем универсальный интерфейс получения урона от пули и ближнего боя Урок #6. Динамическое поведение объекта Цель занятия: научится изменять поведения игровых объектов в процессе геймплея. Описание: Реализуем использование различных оружий, которые будут менять поведение атаки персонажа. Сделаем контейнер, в который можно будет добавлять/удалять поведения. Урок #7. Групповое занятие Цель занятия: закрепить полученные знания по атомарному подходу. Групповое задание: реализовать временные механики: получение яда, восстановление здоровья, бафф к характеристикам Урок #8. Динамический объект Цель занятия: научится менять данные и логику игровых объектов в процессе игры Описание: Реализуем динамические поведения — ходить/летать, подбирать броню, заморозка на 10 сек, яд. Домашнее задание: реализовать подбираемую абилку: “кинуть гранату” Модуль II. Искусственный интеллект Урок #9. Архитектура ИИ Цель занятия: Изучить основные концепции разработки ИИ Описание: В данном уроке рассмотрим принципы разработки искусственного интеллекта. Разберем почему нужно разделять данные и логику. Определим ключевые слои для ИИ: Sensors, Reasoners, Actions, Memory. В качестве примера сделаем поведение атаки противника и область видимости. Урок #10. Иерархическая стейт-машина Цель занятия: Реализовать поведение ИИ с помощью иерархической стейт-машины Описание: Изучим подход организации поведения ИИ в виде состояний. В качестве примера сделаем NPC, который будет патрулировать по умолчанию, и если он видит противника в радиусе, то начинает его атаковать. Урок #11. Дерево поведения Цель занятия: Реализовать поведение ИИ с помощью Behaviour Tree Описание: Организуем поведения ИИ с помощью Behaviour Tree. В первой части урока изучим основные узлы дерева поведения: Action, Sequence, Selector, Condition. Пример будет аналогичен предыдущему занятию. Урок #12. Групповое занятие Цель занятия: Закрепить полученные знания по BehaviourTree Групповое задание: Реализовать поведение добычи ресурсов с доставкой их на базу для NPC. Разделимся на команды. Лучшая команда получит пиццу Домашнее задание: реализовать поведение NPC перетаскивания ресурсов с одного конвертора на другой Урок #13. GOAP (Ч1) Цель занятия: изучить систему принятия решений с помощью подхода Goal-Oriented Action Planning Описание: разберем, что такое Goal-Oriented Action Planning и его принцип работы. Изучим алгоритмы построения плана и что такое World State. Урок #14. GOAP (Ч2) Цель занятия: изучить систему принятия решений с помощью подхода Goal-Oriented Action Planning Описание: рассмотрим реализацию GOAP на Unity Модуль III. Игровая система Урок #15. Стратегии разрешения зависимостей Цель занятия: изучить архитектурные паттерны разрешения зависимостей в контексте игры. Описание: На занятии разберем архитектурные паттерны, которые позволяют разрешать зависимости в коде. Начнем с самого простого синглтона, вторым шагом модифицируем до паттерна Service Locator, а затем напишем свой Dependency Injection. В конце урока сравним все три подхода, рассмотрим их плюсы и минусы. Урок #16. Фреймворк Zenject Цель занятия: изучить фреймворк внедрения зависимостей Zenject. Описание: В данном уроке подробно разберем фреймворк Zenject, который является стандартом игровой индустрии. В процессе занятия изучим контексты, различные способы биндинга и внедрения зависимостей, а также затронем фабрики и пулы. Урок #17. Игровой цикл Цель занятия: реализовать архитектуру управления игровой системой Описание: В данном уроке поговорим о том, как управлять жизненным циклом игры без Mono Kernel и обрабатывать события старта, паузы и завершения игры. Сначала определим интерфейсы для игровых событий, а затем сделаем Game Manager, который и будет их вызывать Домашнее задание: переделать архитектуру демо-проекта зомби шутера на Zenject с игровыми событиями Урок #18. Интерфейс игры. MVO паттерн Цель занятия: Научиться применять паттерн Model-View-Observer в разработке игрового интерфейса. Описание: На занятии поговорим о том, как проектировать игровой интерфейс на Unity. Разберем, что такое слои Model & View, и как они взаимодействуют с помощью паттерна Model-View-Observer. В качестве примера сделаем виджет, который отображает статы игрока на экране Урок #19. Интерфейс игры. MVP паттерн Цель занятия: Научиться применять паттерн Model-View-Presenter в разработке игрового интерфейса. Описание: На занятии разберем MVP паттерн на примере инвентаря предметов, которые можно купить. В качестве закрепления будет групповое задание, в котором нужно будет сделать окошко, отображающее список эффектов. Урок #20. Интерфейс игры. PM паттерн Цель занятия: Научиться применять паттерн Presentation Model в разработке игрового интерфейса. Описание: На занятии разберем MVP паттерн на примере окошка настроек. В качестве закрепления будет групповое задание, в котором нужно будет сделать окошко, отображающее список эффектов. Урок #21. Групповое занятие Цель занятия: Закрепить полученные знания по MVx паттернам. Групповое задание: Реализация окошка поражения Домашнее задание: реализовать окошко снаряжения персонажа Модуль IV. Продвинутый геймплей Урок #22. Процедурные анимации и физика Цель занятия: научиться реализовывать отзывчивый геймплей Описание: Рассмотрим различные инструменты для анимаций и физики: Animation Blending, Inverse Kinematics & Ragdolls Урок #23. Визуальные эффекты и шейдеры Цель занятия: Научиться работать с визуалом Описание: Рассмотрим различные инструменты для создания визуальных эффектов: Decals, Visual Effect Graph, Shader Graph. Реализуем шейдер подсветки предметов Урок #24. Графика и освещение Цель занятия: Научиться работать с графикой и светом Описание: Рассмотрим инструменты Unity для работы со светом: Baking, Reflection Probes, Post Processing Урок #25. Аудиосистема Цель занятия: Реализовать аудиосистему для музыки, звуков и UI Описание: В данном уроке рассмотрим, как можно гибко реализовать аудиосистему таким образом, чтобы бизнес-логика не зависела от звуков. На занятии рассмотрим способы работы со звуками интерфейса, плеером музыки и звуками на сцене. А также рассмотрим Audio Mixer и различные фишки со звуками Урок #26. Камера и катсцены Цель занятия: Освоить инструменты работы с камерой в Unity Описание: На занятии подробно разберем инструмент Cinemachine. Рассмотрим его возможности: настройку, переключение, блендинг, а также границы. Также рассмотрим реализацию системы катсцен и управлением TimeScale. Урок #27. Редактор диалогов Цель занятия: Изучить основы нодового редактора в Unity Описание: На лекции рассмотрим, как можно сделать нодовый редактор используя UIToolkit и GraphView. Шаг за шагом реализуем структуру диалогов и их переходов, окно и Toolbar в Editor. Сделаем сохранение схемы диалогов в конфиг, и на основе конфига запустим диалог в игре. Урок #28. Туториал Цель занятия: Научиться выстраивать архитектуру туториала Описание: В данном уроке рассмотрим кейс реализации шага туториала, на котором нужно сделать прокачку персонажа. Изучим лайфхаки с UI, которые упростят разработку туториала и сделают код поддерживаемым без костылей Модуль V. Проектная работа Урок #29. Выбор проектной работы Цель занятия: Определить формат проектной работы Описание: Обсудим, что из себя представляет проектная работа, а также ответим на вопросы по курсу Урок #30. Защита проектных работ (Ч1) Цель занятия: Выступить с проектной работой Урок #31. Защита проектных работ (Ч2) Цель занятия: Выступить с проектной работой Урок #32. Завершающий урок Цель занятия: Подвести итоги курса. Описание: Финализируем полученные знания, поговорим о том, как можно дальше развиваться в GameDev направлении. Ответим на вопросы по курсу