# Программирование [Илья Яковлев] Unity Adventure. Научись делать игры на Unity с нуля (2025)

Хоттабыч

Местный

[Илья Яковлев] Unity Adventure. Научись делать игры на Unity с нуля (2025)​


1.jpeg
За 6.5 месяцев ты полностью освоишь программирование на языке C#, разберешься с работой над 2D и 3D проектами в движке Unity, научишься проектировать игровые системы, и закончишь курс полноценным сложным проектом!

  • Программирование с нуля
    Начнем изучение разработки игр с нуля и дойдем до проектирования целой игры. Формат отлично подойдет как для тех, кто еще не дорос до уровня juniour, так и для желающих восполнить и структурировать все необходимые знания
  • Практика
    Вас ждут как домашние задания с развернутым фидбеком, так и живые обсуждения возникающих трудностей. Все обучение направлено на отработку полученных знаний в движке
  • Видеозаписи
    Все уроки разделены на небольшие лекции для удобного усвоения материала. Кроме того, доступ к платформе останется у вас даже после окончания курса, поэтому к урокам можно будет вернуться позже
Кратко о курсе
Курс структурирован так, чтобы дать полную базу по С#, начиная с базового и заканчивая продвинутым уровнем, при этом отрабатывая все на практике в Unity.
Результат будет достигаться путем изучения теории, реализации игровых механик и полноценных проектов на Unity.
Весь курс поделен на четкие логические блоки и совмещает в себе изучение языка, работу в движке, а также получение дополнительных знаний в виде необходимой базы по математике, дополнительным инструментам, используемым при разработке игр, системы контроля версий и др.
Кроме того, особенностью данного курса является создание финальной полноценной игры, на которой мы сможем применить все полученные
знания для структурированной организации работы проекта, изучим довольно сложные, но необходимые концепции при проектировании
игры, такие как внедрение зависимостей, необходимые паттерны проектирования, разработка игрового интерфейса с помощью MVx паттернов, изучим идею разделения данных и логики при разработке геймплея и много другое.
При проектировании программы учитывался тот факт, что голое изучение теории может быстро утомить, поэтому блоки грамотно совмещают
теоретические знания и практику, т.е. почти все, что мы будем изучать, выльется в те или иные игровые механики/практические задачи/проекты.

Тебе подойдет курс, если ты

  • Разрабатываешь казульные игры, но хочешь попробовать себя на проектах посложнее
  • Чувствуешь нехватку способностей, чтобы довести проект от начала до релиза
  • Обожаешь делать игры и хочешь развиваться в этом направлении с единомышленниками
  • Начал разрабатывать игры, но чувствуешь нехватку знаний по языку или неуверенность в работе с движком
Чему вы научитесь на курсе:

  • Язык C#
    Начнем изучение с основ и закончим продвинутым уровнем. События, интерфейсы, лямбда выражения и многие другие особенности языка станут вашими помощниками в написании чистого и понятного кода
  • Делать 2D и 3D механики
    В ходе курса мы будем создавать множество игровых механик, а также изучать инструменты движка, которые помогут в работе как над 3D, так и над 2D проектами
  • Визуал
    Игры – не только программирование. Мы разберем множество аспектов, которые помогут украсить вашу игру. Анимации, настройка света, ассетов и материалов, создание эффектов – это и многое другое мы освоим в ходе курса
  • Создавать игры
    Да, многие школы любят называть механики играми. Однако создание завершенного продукта требует гораздо больших усилий, чем просто сделать игровую часть. Поэтому в курсе предусмотрен отдельный блок, где мы с накопленными знаниями создадим завершенный проект с нуля
  • Физика
    Почти в любой игре присутствуют элементы физики: гравитация, расчет столкновений, рейкасты и многое другое. Поэтому не мало времени на курсе уделяется изучению физических особенностей движка и применению их на практике
  • Математика
    Для создания игр просто необходимы базовые знания в области математики и геометрии. Поэтому на курсе выделены отдельные блоки, где мы на примере реализации игровых ситуаций окунемся в эту тему
Программа курса

0-й блок. Знакомство. Подробнее о курсе

Отведём немного времени на знакомство и обсудим, что нас ждет на курсе.

Модуль 1. C# базовый
Набираем необходимый минимум по языку на примере создания консольных приложения с использованием платформы .NET, чтобы войти в Unity уже немного подготовленными и не растеряться при создании первых игровых механик.

1-й блок. С# для начинающих.
Набираем необходимый минимум по языку, чтобы войти в Unity уже немного подготовленными и
не растеряться.

Неделя 1.

  • Зачем этот блок и почему не прыгнуть сразу в Unity?
  • Типы данных, работа с ними, операции, преобразования, особенности работы со строками.
  • Первое консольное приложение
  • Условные операторы (if else, switch) и рекомендации по работе с ними
  • Циклы for, foreach, while - в каких случаях и какой лучше использовать?
Неделя 2.

  • Массивы и списки (Arrays и Lists). Особенности и различия
  • Чем отличаются ссылочные типы (reference types) от типов значений (value types). Какие
  • опасности вас могут ждать.
  • Методы. Перегрузка методов.
  • Коллекции (вспоминаем списки и изучаем словарь (Diction)ry), очередь (Queue), стэк
  • (Stack)). Когда их удобно использовать?
Неделя 3.

  • Классы и экземпляры классов. Конструктор и деструктор объекта (базовое понимание)
  • Поля, переменные, свойства. В чем принципиальная разница?
  • Модификаторы доступа и их необходимость
Модуль 2. Знакомство с Unity
Знакомимся с Unity, интерфейсом. Осваиваем базовые инструменты и отрабатываем полученные в прошлом блоке знания уже на механиках в движке. Также не забываем, что разработка игры – не только код, поэтому этот блок также посвящен изучению инструментов анимации и эффектов на базовом уровне, работе с материалами, импорту и настройке ассетов различными способами.

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

Неделя 4.

  • Знакомство с Unity. Создание первого проекта, какие предустановки проектов бывают, их
  • различия. Интерфейс программы
  • Базовые инструменты для работы. Создание объектов на сцене и взаимодействие с ними
  • Базовые настройки сцены и камеры. Разные виды проекций
  • Некоторые шорткаты и лайфхаки для упрощения работы
  • Создание скриптов. Почему кажется, что С# в Unity другой, но на самом деле это не так,
  • как применить полученные знания языка в игре?
  • Разбираем основной цикл работы Unity.
  • Отработка пройденных тем на создании первых механик в движке
Неделя 5.

  • Работа с материалами, текстурами, пакетным менеджером. Делаем наш пример более
  • симпатичным и реализуем еще одну механику
  • База по анимациям и эффектам
  • Небольшое заключение по начальному этапу. Подводим результаты
Модуль 3. Необходимая математика для создания игр
Как бы не хотелось этого избежать, но базовые знания математики и смежных областей необходимы для создания даже самых простых игр. Поэтому данный блок посвящен обязательным темам для комфортного создания игр. Кватернионы, векторная математика, необходимые теоремы. Разберем теорию и научимся применять все это в Unity

3-й блок. Необходимая математика для создания игр + технические моменты
Как бы не хотелось этого избежать, но базовые знания математики и смежных областей
необходимы для создания даже самых простых игр. Поэтому данный блок посвящен
обязательным темам для комфортного создания игр. Разберем теорию и научимся применять все
это в Unity. Кроме того, научимся работать с GIT и отладкой проекта

Неделя 6.

  • Работа с векторами. Векторная математика
  • Математические теоремы, которые часто пригождаются для расчетов
  • Кватернионы, углы Эйлера
  • Перевод между разными системами координат
Неделя 7.

  • Система контроля версий. Как пользоваться удаленным репозиторием и какие
  • инструменты в этом помогут?
  • Как дебажить проект и находить ошибки? Какие инструменты для этого можно
  • использовать.
  • Базовая работа с физикой в Unity
  • Отличия Update и FixedUpdate, где и какую логику надо писать
  • Rigidbody и способы работы с ним
  • Коллайдеры и взаимодействия между объектами
Модуль 4. C# средний уровень + углубление в Unity.
Углубляемся в язык, чтобы реализовывать более сложные механики и системы. Кроме того, этот и последующие блоки, в отличие от первого, предусматривают плотную интеграцию с движком, т.е. знания языка будут сразу переплетаться с работой в Unity, созданием игровых механик и сопутствующими нюансами для лучшего усвоения материала, без обращения к консольным приложениям. Наследование, полиморфизм, подробное рассмотрение компонентной системы, особенности Monobehaviour и многое другое нам предстоит изучить в данном блоке

4-й блок. С# средний уровень + углубление в Unity.
Углубляемся в язык, чтобы реализовывать более сложные механики и системы. Кроме того, этот и
последующие блоки, в отличие от первого, предусматривают плотную интеграцию с движком, т.е.
знания языка будут сразу переплетаться с работой в Unity, costанием игровых механик и
сопутствующими нюансами для лучшего усвоения материала.

Неделя 8.

  • Введение в ООП - что такое и с чем едят.
  • Наследование - в чем прелесть и чем опасно?
  • Что такое Monobehaviour в Unity? Почему наследуемые от Monobehaviour классы лишены
  • конструкторов и другие особенности
  • Система префабов в Unity. Original и variant prefab.
  • Что такое Instantiate? Правильное создание и инициализация объектов на сцене.
  • Абстрактные классы
  • Виртуальные и абстрактные методы - подводные камни
  • Полиморфизм - лучшее, что придумало человечество
Неделя 10.

  • База по UI элементам. Как делают хп бары, магазины и тд?
  • Код стайл - что это такое и как это помогает в разработке проекта.
  • Лайфхаки для лучшей читаемости кода
  • Try методы - как организовать работу с методом, который может не выполниться?
  • Принципы DRY, KISS, YAGNI - разбираем на пальцах
Модуль 5. Изучение важных инструментов в Unity
В предыдущих блоках мы уже научились работать с Unity, реализовали несколько механик и изучили довольно много вещей, связанных с языком программирования, однако в движке есть дополнительные важные инструменты, которые необходимо освоить и научиться использовать. В этом блоке будут разобраны многие инструменты и пакеты, которые используются для реализации как 3d, так и 2d механик

5-й блок. Изучение важных инструментов в Unity
В предыдущих блоках мы уже научились работать с Unity, реализовали несколько механик и
изучили довольно много вещей, связанных с языком программирования, однако в движке есть
дополнительные важные инструменты, которые необходимо освоить и научиться использовать. В
этом блоке будут разобраны некоторые из них

Неделя 11.

  • Углубляемся в физику и математику.
  • Рейкасты, физические слои.
  • Математические функции, интерполяция и работа с графиками.
  • Скалярное и векторное произведения. Как применять для игровых механик
  • Физическое и нефизическое движение. Как реализуется и какой вариант лучше?
  • Инструмент Cinemachine. Учимся продвинутой работе с камерой
Неделя 12.

  • Продвинутая работа с анимациями в Unity. Mecanim animation system. Учимся импортировать уже готовые анимации, переиспользовать существующие и работать со слоями
  • Анимационные события. Как реагировать на определенные моменты анимации?
  • Что именно является ИИ? Базовое разделение логики принятия решений и управляемого объекта
  • Паттерн фасад. Как заставить несколько систем удобно работать вместе?
  • NavMesh. Поиск пути на уровне
  • Препятствия и генерация сетки для навигации ИИ
  • Как заставить ИИ прыгать?
Неделя 13.

  • Понятие асинхронного программирования. Корутины
  • Правильный менеджмент корутин и особенности их выполнения
  • Инструменты работы со звуком в Unity
  • Shader graph. Введение в создание шейдеров
Неделя 14.

  • Работа со спрайтами. 2D анимации
  • Tilemap - как быстро и удобно создавать 2д миры
  • Отличается ли физика в 2D?
  • Особенности разработки в 2D по сравнению с 3D
Модуль 6. Дополнительные темы
В этом блоке будет разобрано несколько важных тем, не относящихся напрямую к разработке игры в движке. Тем не менее это важные составляющие при разработке любого проекта: принципы разработки, которых стоит придерживаться, система контроля версий, код стайл, способы отладки проекта - все это используется при создании любой игры

6-й блок. С# и Unity - Продвинутый уровень
Изучаем продвинутые техники программирования. В этом блоке разобраны обязательные вещи,
которые необходимы при создании любого проекта, благодаря ним архитектура игры получается
более удобной и гибкой. Каждый junior программист обязан знать данные темы и уметь
применять их на практике.

Неделя 15.

  • Делегаты. Создание коллбэков по завершении действий
  • Анонимные методы и лямбда выражения
  • События - сделай свой код менее связным
  • Рефакторинг предыдущих проектов с учетом новых знаний
  • Как на событиях реализовать простую реактивность (реактивные свойства и списки)
Неделя 16.

  • Generics (обобщения) - переиспользование кода и избавление от дубляжа
  • Как реализовать универсальное хранилище
  • Что такое сериализация в Unity? Как отображать# классы в инспекторе?
  • Кастинг классов. Изучение is, as конструкций
  • Boxing/unboxing. Особенности использования структур и интерфейсов
  • LINO - удобная работа с коллекциями. Опасно ли использование для производительности?
  • Исключения (exception) - какие бывают и зачем нужны?
  • Инкапсуляция. Как соблюдать? Опасности наследования и protected членов
  • Интерфейсы IEnumerable, IReadOnlyList, IReadOnlyDictionary
  • IDisposable - зачем нужен этот интерфейс и как его применять
  • Тип object - самый главный родственник для всех типов в C#
  • Атрибуты в Unity. Обязательные атрибуты для разработки проекта.
  • OnValidate - валидация данных
Неделя 17.

  • Подготовка к финальному проекту
  • Рефакторим одну из предыдущих механик с ботами, доводя ее до цельной игры с правилами и четким порядком выполнения
  • Разбираемся на примере данной мини игры с понятиями конфигов, игровых ресурсов
  • Знакомимся с паттерном фабрики, применяем его для лучшей организации создания игровых объектов
  • Менеджмент сцен. Как правильно загружать сцены
  • Как без проблем менять окружение в вашей игре. Аддитивные сцены
  • Делаем заключение по проблемам, которые начинают возникать в ходе разработки
  • целостной игры, чтобы начать их решать при организации большой игры с нуля
Модуль 7. C# и Unity - Продвинутый уровень
Изучаем продвинутые техники программирования. В этом блоке разобраны обязательные вещи, которые необходимы при создании любого проекта, благодаря ним архитектура игры получается более удобной и гибкой. Каждый junior программист обязан знать данные темы и уметь применять их на практике.

7-й блок. Создание полноценного проекта
К этому моменту у нас за плечами уже множество реализованных механик, мы знакомы с основными инструментам Unity, хорошо владеем С#.
Теперь мы готовы к созданию полноценного проекта.
В ходе этого блока будет реализована полноценная игра, по максимуму задействуем полученные знания, изучим дополнительные необходимые
инструменты для разработки, обсудим, как можно организовать разработку с нуля и многое другое.
Игра будет состоять из полноценного главного меню с дополнительными мета механиками + будет реализована интересная геймплейная часть

Неделя 18

  • Создание проекта, с чего в первую очередь можно начать?
  • Разбираем возможные структуры организации папок и сцен
  • Организация порядка выполнения всего проекта. Создание точки входа в приложение подконтрольный старт каждой сцены
  • Знакомство с понятием сервисов. Как строить модульную архитектуру на основе отдельных сервисов для решения задач
  • Реализуем первые сервисы (загрузка конфигов, ресурсов, асинхронность и тд)
  • Реализуем систему конфигурации проекта. Как удобно и централизировано настраивать
    игру через настроечные файлы с потенциальной возможностью поддерживать загрузку конфигов из облака
  • Как управлять жизненным циклом сервисов?
  • Рассмотрение возможных механизмов внедрения зависимостей по проекту: синглтон, сервис локатор, DIContainer.
  • Как итог - реализация своего DI контейнера, на котором рассмотрим принцип работы такого подхода его преимущества
  • Реализация родительских контейнеров
  • Реализация сервиса смены сцен с загрузочным экраном
  • В итоге получаем понятную и поддерживаемую схему работы всего проекта
Неделя 19

  • Разбираемся с вопросом сохранения данных
  • Какие есть варианты работы с данными по проекту. Как сделать решение, которое можно
  • перетаскивать из проекта в проект?
  • Решаем основные задачи сохранения:
    - Сериализация
    - Хранение (с возможностью хранить данные удаленно)
    - Ключи
  • Познакомимся с самым популярным форматом для сериализации данных - json и пакетом для работы с ним
  • Реализуем гибкий механизм актуализации данных со всего проекта
  • Как начинать игру сначала и как сбрасывать сохранения?
  • Как удобнее разбивать данные для сохранения
Неделя 20

  • Начинаем организацию UI в игре
  • К этому моменту мы уже знакомы с подходом, основанным на model view варианте и можем переходить к изучению более сложных концепций
  • Разбираемся, что такое MVx подходы и как их можно применять в разработке игр
  • Посмотрим, как с помощью MVx паттернов реализовывать UI в игре, причем как простые
  • элементы интерфейса для отображения, например, валюты, так и вложенные, по типу всплывающих окон
  • Организуем сервис попапов
  • Разберемся с анимацией интерфейса на основе пакета DoTween. Разберем как простые варианты, так и довольно сложные очередности анимаций
  • По итогу получим довольно универсальную схему для работы с UI в широком пласте проектов
Неделя 21

  • Начинаем организацию геймплея
  • Рассмотрим ООП подходы для организации игровых объектов, с которыми мы уже знакомы, и подробно сравним их с Data oriented решениями
  • Для знакомства с Data oriented подходом реализуем игровые сущности через призму
  • разделения данных и логики. Посмотрим преимущества такого хода мыслей по сравнению с классическим разбиением на объекты
  • Познакомимся с идеей генерации кода и рефлексией. Очень хорошие инструменты для решения рутинных задач написания кода
Неделя 22

  • На основе идей и написанного небольшого фреймворка из предыдущего блока реализуем
  • первых персонажей для игры с гибкой настройкой и разными переиспользуемыми механиками
  • Заложим основу для добавления новых персонажей и сущностей в нашу игру
  • Рассмотрим, как с точки зрения логики можно предусматривать различные
  • потенциальные задержки, связанные с анимациями, визуальными эффектами и так далее
  • Выстроим логику обновления игровых объектов отдельным слоем для более подконтрольной работы
Неделя 23

  • Подробнее окунаемся в изучение искусственного интеллекта
  • Разбираем основные блоки, из которых состоит Проецируем эту теорию на нашу игровую ситуацию
  • Реализуем гибкую стейт машину, подходящую под разные игровые задачи
  • На основе стейт машины реализуем ИИ для созданных персонажей
  • Реализуем прокаченную иерархическую версию машины состояний
  • Сделаем сложный мозг для главного героя, состоящий частично из управления игроком частично из управления ИИ
  • Как можно организовать сервис отлавливания ввода пользователя
  • Реализуем отдельный слой для обновления логики управления в игре
  • Как итог, поймем, какие есть подходы в реализации ИИ для игр, и как правильно и гибко подключать его к управляемым объектам
Неделя 24

  • У нас есть основная база механик. Настало время организации геймплейного цикла игры
  • Добавляем основные игровые настройки
  • Настраиваем отношения между игровыми персонажами, чтобы они могли распознавать союзников и врагов
  • Реализуем основные этапы геймплея
  • Разбираем, какие идеи могут лечь в основу организации гибкого и расширяемого цикла игры
  • Выстраиваем понятную и подконтрольную схему работы геймплея
Неделя 25

  • Игра - не только код и логика. До этого мы вообще не притрагивались к визуалу и анимациям, описывая все на уровне логики.
  • И вот после того, как основа логической части игры готова, надо не забыть прицепить к логике визуальной отображение
  • Встраиваем игровые модели
  • Подключаем необходимые анимации
  • Настраиваем их скорость в соответствии с логикой игры
  • Добавляем UI оформление
  • Делаем дополнительные игровые окна
  • Встраиваем эффекты
  • Обращаем внимание на то, что подключенный визуал практически не влияет на логику выполнения игры
  • И как итог, превращаем проект в симпатичную полноценную игру
Неделя 26

  • На этом этапе стоит обсудить вопросы оптимизации
  • Нужно ли оптимизировать логику игры. Разбираемся с тем. почему не стоит этого делать заранее
  • Почему чаще всего именно графическая составляющая является узким горлышком проекта?
  • Запечка света
  • Батчинг
  • Настройки URP рендерера
  • Инструменты анализа производительности проекта
  • Как можно использовать пул объектов для оптимизации
  • На какие настройки стоит обратить внимание при сборке билда игры
  • Как работать с тенями
  • На что мы, как разработчики, слабо можем повлиять при оптимизации проекта
Неделя 27

  • На данном этапе у нас есть полностью готовая базовая версия игры. Но как часто бывает,
    на этом разработка не заканчивается, и появляется желание добавлять новые игровые
    фичи, поэтому просто необходимо рассмотреть, как можно добавлять новые механики в
    проект и при этом не терять модульности и гибкости при реализации
  • Эти вопросы мы рассмотрим на примере реализации следующих механик
  • Добавим получение способностей по ходу прохождения игры. Способности будут совершенно разные от пружинящих снарядов, до увеличения статов персонажа
  • Также добавим выпадение лута с убитых врагов: монетки, опыт, здоровья и тд
  • Естественно, эти механики надо иметь возможность настраивать, поэтому займемся конфигурированием этого дела
  • Привяжем новый необходимый Ul и добавим новые этапы в геймплейный цикл нашей игры
  • По итогу поймем, как можно добавлять новые сложные геймплейные механики, при этом
    не сильно конфликтуя с предыдущей реализаций кодовой части. Кроме того, все сильнее
    будут раскрываться преимущества организации архитектуры нашего проекта
Неделя 28

  • Продолжаем внедрять новые фичи в проект
  • Добавим новую мета механику с прокачкой статов персонажа между игровыми забегами
  • Разберем, как можно отображать 3D модели на Ul
  • Добавим новый интересно организованный попап в игру
  • Посмотрим, как конфиги могут конфликтовать актуальными игровыми данными и как их подружить
  • По итогу получим завершенную полноценного сложную игру с множеством как геймплейных, так и мета механик
  • Вы получите навыки решения реальных игровых проблем
  • Поймете, как расширять игровую систему без перелопачивания всего кора игры
  • И получите множество универсальных инструкций, которых можно придерживаться при разработке собственного проекта
Модуль 8. Создание полноценного проекта
К этому моменту у нас за плечами уже множество реализованных механик, мы знакомы с основными инструментам Unity, есть крепкая база по C#. Теперь мы готовы к созданию полноценного проекта. В ходе этого блока будет реализована полноценная игра, по максимуму задействуем полученные знания, изучим способы внедрения зависимостей и напишем свой DI контейнер, научимся работать с UI с помощью MVx паттернов, соберем понятный цикл работы всей игры, обсудим как можно организовать разработку с нуля и многое другое. Игра будет состоять из полноценного главного меню с дополнительными мета механиками, а также будет реализована интересная геймплейная часть.
Подводим итоги курса. Обсуждаем полученные навыки и определяем возможные векторы
развития в области разработки игр.

Что ты получишь на курсе?

  • Отличное владение C#
  • Работа в движке Unity и изучение сопутствующих инструментов
  • Реализация множества базовых игровых механик, которые обязательно пригодятся в
  • любом проекте
  • Полностью законченный проект (начнем с нуля и доведем ио завершённого состояния).
  • наглядных примерах придет понимание того, как разрабатывать и организовывать большой проект
  • Домашние задания с подробной проверкой
  • По каждой теме/блоку будет краткая сводка для закрепления материала, дополнительные полезные ссылки
  • Комьюнити разработчиков, с которыми вы можете пообщаться, организовать команду и обменяться опытом
Подарки для записавшихся на курс:

  1. Гайд разработчика
    Сводка каналов, материалов и книг, которые помогут вам прокачаться как разработчику (подборка сделана на основе моего опыта)
  2. Сводка правил чистого кода
    Документ, где расписаны универсальные правила чистого кода для того, чтобы ваш код стал понятным и читаемым
  3. СкидкПосле прохождения программы вам будет доступна пожизненная скидка 10% на прохождения моего углубленного курса по архитектуре игр
Автор: Илья Яковлев
Разработчик игр и автор обучающего YouTube канала, а так же Автор курса по архитектуре игр в Unity, на котором обучилось уже более 250 человек!

Тариф Базовый
- Доступ к закрытой группе в дискорде
- Домашние задания с полной проверкой
- Дополнительные материалы по каждому модулю
- Открытые занятия с общением каждые две недели

СКАЧАТЬ
 📥 Скрытое содержимое! Войдите или Зарегистрируйтесь
 

Похожие темы

Сверху