Распродажа

Курс разработки 2D-игр на Unity с нуля

От первого скрипта в Unity до собственного 2D-платформера на C#

ЛУЧШИЙ КУРС в Unity

Первоначальная цена составляла 990 грн.Текущая цена: 390 грн.

-60%
Вы экономите: 600 грн (60%)
До конца акции:18час47мин15сек

−20% при покупке от 2 курсов — активируется автоматически

Разрозненные уроки по Unity редко складываются в цельный проект. Здесь каждая новая тема языка C# и механика движка сразу встраивается в код одной игры — от управления персонажем до боя, интерфейса, инвентаря и сборки под Android, а каждый следующий раздел опирается на код, написанный в предыдущем.

  • Собственный 2D-платформер: персонаж с анимацией, противники, стрельба, здоровье и инвентарь
  • Практика C# и ООП на реальном игровом коде — от переменных до классов и интерфейсов
  • Проект под контролем версий в Git и тестовая сборка под Android
Add to Cart
Курс создания 2D-игр в Unity
Курс разработки 2D-игр на Unity с нуля
990 грн Первоначальная цена составляла 990 грн.390 грнТекущая цена: 390 грн.
  • 15 часов 54 минуты видео
  • 125 уроков в 11 модулях
  • Скачивается на компьютер
  • Доступ навсегда, без дедлайнов
  • Сертификат по запросу

Цифровой видеокурс для самостоятельного изучения, без обратной связи с преподавателем. После оплаты курс появится в вашем аккаунте на сайте, а ссылка на материалы придёт на email.

Покупка занимает минуту
  1. Добавляете курс в корзину.
  2. Вводите почту и пароль — это ваш аккаунт, в нём курс будет храниться постоянно.
  3. Оплачиваете любым удобным способом — их больше восьми.
  4. Курс сразу открывается в аккаунте, ссылка дублируется на почту.

Доступ навсегда: вернуться к курсу можно и через год. Вопросы — чат на сайте или info@siluette.com.ua.

Курс ведётся на русском языке: видео и материалы русскоязычные. Украинская версия курса появится позже.

Что вы сможете после курса

  • Программировать на C#: переменные, типы данных, условия, циклы, массивы и методы — и применять их в игровых механиках
  • Настраивать анимацию персонажа через Animator и Animator Controller: ходьбу, прыжок и переходы между состояниями
  • Собирать боевую систему: здоровье и урон, ближнюю атаку противника и дальний бой стрелами с пулом объектов
  • Применять основы ООП — классы, наследование, полиморфизм, интерфейсы — в коде игровых объектов
  • Собирать интерфейс игры: шкалу здоровья, меню и сохранение данных игрока через PlayerPrefs
  • Вести проект в Git, собирать тестовый APK под Android и готовить карточку приложения в Google Play

Кому подойдёт курс

Начинающим без опыта программирования

Обучение начинается с установки Unity и объяснения базовых понятий движка и языка C# с нуля — предварительные знания программирования или разработки игр не нужны.

Тем, кто хочет разобраться в C# на практике

Переменные, циклы, массивы, классы и ООП разбираются не отдельным теоретическим блоком, а сразу на игровых механиках — здоровье, урон, стрельба, инвентарь.

Тем, кто рассматривает геймдев как профессию

В курсе разбираются портфолио, резюме и вакансии программиста и геймдизайнера — для тех, кто планирует трудоустройство в отрасли, а не только хобби.

Курс не подойдёт тем, кто ищет 3D-разработку, сетевую игру с мультиплеером или доведённую до магазина публикацию коммерческого проекта — в курсе этого нет.

Как проходит обучение

  • Уроки открываются постепенно по мере прохождения, а не все сразу — Материал усваивается по шагам, без соблазна распылиться на весь курс сразу
  • Под каждым видео — карточка для загрузки домашнего задания и статус его проверки куратором — Есть кому разобрать ошибки в собственном коде, а не только посмотреть видео
  • Вопросы куратору задаются в чате курса, который принимает скриншоты и файлы — Вопрос по своему коду можно задать сразу, не откладывая на потом
  • Видеоплеер поддерживает регулировку скорости и режим окна поверх других программ — Удобно держать урок открытым прямо во время работы в Unity
  • Выполненные и принятые домашние задания видны другим ученикам потока — Можно посмотреть чужие решения той же задачи и сверить свой подход

Что понадобится для обучения

  • Unity Editor и Unity Hub
  • Среда разработки JetBrains Rider или Visual Studio для написания кода на C#
  • Аккаунт на GitLab и клиент SourceTree для работы с системой контроля версий Git

Почему самостоятельно разобраться сложно

Отдельные уроки и статьи по Unity обычно показывают один приём — прыжок, анимацию или систему урона — вне контекста цельного проекта. Собрать из таких примеров боевую систему, инвентарь и интерфейс, которые работают вместе в одном коде, сложнее, чем кажется по отдельным примерам.

Ошибки вроде ложных переходов анимации, отсутствия реакции на урон или лишних вызовов GetComponent и Instantiate, замедляющих игру, проявляются только на реальном объёме кода — и без разбора остаются в проекте.

Довести проект до публикации — собрать APK, настроить карточку приложения в Google Play, подключить монетизацию через Unity Ads и Unity IAP — отдельная тема, которую самостоятельные туториалы почти не затрагивают.

Что изменится

До курса

  • Нет опыта программирования и разработки игр
  • Непонятно, как устроена анимация персонажа в Unity
  • Нет представления, как собрать боевую систему игры
  • Код разрастается и начинает тормозить
  • Проект существует только на одном компьютере

После курса

  • Пишете на C# и ориентируетесь в интерфейсе Unity
  • Настраиваете Animator Controller и переходы между анимациями ходьбы и прыжка
  • Реализуете здоровье, урон, ближнюю атаку и стрельбу с пулом объектов
  • Оптимизируете код через пул объектов и словарь GameManager вместо GetComponent и Instantiate
  • Ведёте проект в Git и получаете тестовую сборку под Android

Как устроен путь

  1. Основы Unity и C# Устройство движка, интерфейс редактора и базовый синтаксис языка на примере управления персонажем
  2. Игровые механики Боевая система, анимация, ООП и стрельба встраиваются в код одного растущего проекта
  3. Интерфейс и данные Шкала здоровья, меню, система инвентаря и сохранение данных игрока
  4. Публикация Контроль версий в Git, сборка под Android и подготовка карточки приложения в Google Play

Программа курса

125 уроков · 11 модулей · 15 часов 54 минуты видео · от первого объекта на сцене до сборки игры под Android

  • Раздел вводит в интерфейс Unity: создание 2D-проекта, работа с объектами и компонентами, первый скрипт управления персонажем и сборка игрового уровня из префабов.

    • Структура проекта15:18

      Создаётся новый 2D-проект через Unity Hub, и разбираются основные окна редактора — Project, Hierarchy, Scene и Inspector, а также понятия GameObject и компонента. Отдельно рассматривается обязательный для всех объектов компонент Transform, отвечающий за положение, поворот и масштаб.

    • Компоненты21:56

      На примере игрока и платформы разбираются четыре базовых компонента Unity: Transform, Sprite Renderer, Rigidbody 2D и Collider. Показано, как объект получает изображение через спрайт, физическое тело с гравитацией и столкновения через коллайдер.

    • Управление игроком11:56

      Создаётся первый C#-скрипт и объясняются методы Start и Update, после чего пишется код для перемещения персонажа влево-вправо по нажатию клавиш через Transform. Скорость движения корректируется через Time.deltaTime, а лишний поворот объекта устраняется настройкой Freeze Rotation по оси Z у Rigidbody2D.

    • Переменные и работа с физикой14:17

      Объясняется назначение переменных и типа float на примере скорости персонажа, а разница между GetKeyDown и GetKey показана на примере однократного нажатия клавиши. Добавляется прыжок через приложение силы к Rigidbody2D методом AddForce с импульсом ForceMode2D.Impulse.

    • Префабы и сцены8:46

      Из объектов игрока и платформы создаются префабы, из которых собирается новая сцена уровня, а камера делается дочерним объектом игрока, чтобы следовать за ним. Дополнительно даётся домашнее задание собрать свой уровень и показан бесплатный инструмент планирования задач Trello.

    • Учимся отправлять ДЗ5:35

      Разбирается формат сдачи домашних заданий через Unity Package: сохранение проекта, экспорт с учётом зависимостей ассетов, исключение лишних сцен и единый шаблон именования файла. Готовый пакет загружается в облачное хранилище, а ссылка на него отправляется куратору.

  • Раздел разбирает синтаксис C# от типов данных и переменных до массивов и методов — на консольных примерах и в применении к игровым объектам Unity.

    • Раздел разбирает типы данных C#, объявление и приведение переменных, а также математические операции и закрепляет материал расчётом площади фигур.

      • Примитивные типы данных в C#9:03

        Урок систематизирует примитивные и составные типы данных C#, их объём в байтах и принцип двоичного представления. Разбираются числовые типы разного размера — byte, short, int, long — а также float, char, string и базовый тип object, и критерии выбора типа под конкретную задачу.

      • Объявление переменных5:48

        На практических примерах разбирается синтаксис объявления и инициализации переменных в C#: указание типа, имя в стиле camelCase и разница между объявлением и инициализацией через знак равенства. Показана разница между переменной, объявленной в скрипте, и переменной внутри метода, и её влияние на область видимости.

      • Приведение типов6:00

        Урок разбирает явное приведение типов через указание типа в скобках, включая перевод float в int с отбрасыванием дробной части, и перевод числа в строку методом toString. Отдельно рассматриваются случаи неявного приведения между числовыми типами, например short и byte в int.

      • Математические операции6:54

        Урок показывает арифметические операции C#: сложение, вычитание, умножение, целочисленное деление с остатком через оператор процента, а также приоритет их выполнения. Рассматриваются методы класса MathF для чисел с плавающей точкой, включая возведение в степень MathF.Pow.

      • ДЗ по операциям1:05

        Домашнее задание — написать программу, вычисляющую площадь квадрата, прямоугольника и круга по заданным сторонам и радиусу, с использованием переменных, математических операций и константы Mathf.PI. Результат — три числа с площадями фигур, выведенные в консоль Unity.

    • Раздел разбирает условные операторы if и switch, циклы while и for и их практическое применение — от возврата персонажа при падении до таблицы умножения и накопительных расчётов.

      • Условные операторы9:48

        Урок разбирает условные операторы if, else и else if, знаки сравнения и логические операторы && и ||, а также отрицание !, определяющие ветвление выполнения программы. Показано, как условие if проверяет логическое выражение и выполняет своё тело только при истинном результате.

      • Применение if: падение за карту9:55

        Показано, как условие if по координате transform.position.y возвращает персонажа в исходную точку при падении ниже заданной высоты, заданной переменной minimalHeight. Дополнительно объясняется сброс скорости через Vector2, чтобы Rigidbody 2D не сохранял набранную при падении скорость после телепортации.

      • Bool-переменная IsCheatMode4:36

        Показано, как логическая переменная isCheatMod, вынесенная в инспектор Unity, управляет поведением персонажа при падении: включённый режим телепортирует его в начальную точку, выключенный — удаляет объект со сцены методом Destroy. Условие объединяет проверку падения с проверкой isCheatMod через оператор &&, а ветка elseIf проверяет инверсию значения через восклицательный знак.

      • Switch case4:24

        Рассматривается конструкция switch-case как альтернатива цепочке if-else-if на примере переменных с количеством фруктов: каждый case описывает конкретное значение и завершается ключевым словом break. Отмечается, что switch выполняет ту же задачу, что и if-else-if, но работает медленнее для процессора.

      • Лямбда операторы4:49

        Урок объясняет сокращённую запись операций присваивания вроде «+=» и унарные операторы инкремента и декремента «++» и «–» в постфиксной и префиксной форме. Показана разница между формами: при постфиксной сначала выводится старое значение переменной, при префиксной — уже изменённое.

      • ДЗ с if2:23

        Домашнее задание — написать программу, которая по значениям трёх переменных с количеством фруктов определяет и выводит их названия в порядке убывания количества с помощью вложенных условных операторов if. Подсказка предлагает размещать внутри одного условия дополнительные проверки для сравнения значений.

      • Цикл while5:37

        Урок объясняет синтаксис и работу цикла while: конструкция повторяет тело цикла, пока указанное условие остаётся истинным, в отличие от однократного выполнения оператора if. На примере переменной с количеством яблок показано, как цикл с уменьшением значения внутри тела выводит сообщение несколько раз, а также разбирается опасность зависания программы при неверно составленном условии выхода.

      • Цикл for4:22

        Урок объясняет устройство цикла for в C#: три части его заголовка в скобках — объявление переменной-счётчика, условие продолжения и правило изменения счётчика — и порядок их выполнения на каждом шаге. Переменная-счётчик обычно объявляется типом int с начальным значением 0 и изменяется инкрементом или декрементом.

      • Применение цикла (таблица умножения)4:52

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

      • Применение цикла (задача с лыжником)5:17

        Урок решает задачу о нарастающем пробеге лыжника циклом while, объясняя, что выбор цикла while вместо for оправдан, когда число повторений заранее неизвестно. В теле цикла на каждом шаге пересчитывается дистанция с процентным приростом и выводится сообщение через конкатенацию строк.

    • Раздел вводит массивы и методы C#, показывает их применение на игровых объектах и завершается правилом читаемого именования переменных в коде.

      • Массивы и работа с индексами12:07

        Урок вводит массивы как набор однотипных переменных под одним именем: объявление, инициализация ключевым словом new и обращение к элементу по индексу, начиная с нуля. Показано заполнение массива чисел циклом for и хранение в массиве компонентов Unity, например Sprite Renderer, заполняемого в инспекторе перетаскиванием объектов.

      • ДЗ по массивам2:11

        Домашнее задание — вычислить, сколько раз нужно сложить пополам лист бумаги, чтобы его толщина превысила расстояние до Луны, с учётом переполнения типа int, и перекрасить все платформы уровня в разные цвета способом с массивом Sprite Renderer. Задание опирается на принцип удвоения толщины листа при каждом сложении.

      • Структура и вызов методов14:24

        Урок объясняет структуру метода в C#: сигнатуру с модификатором доступа, типом возвращаемого значения и именем, аргументы в скобках и оператор return, на примере метода вычисления площади прямоугольника. Показано, что метод с указанным типом возвращаемого значения обязан его вернуть, а после return дальнейшие строки метода не выполняются.

      • ДЗ по методам1:01

        Домашнее задание — написать три метода: сравнение двух чисел с возвратом bool, вывод сообщения без аргументов и без возвращаемого значения, и вычисление площади окружности по радиусу. Первый метод использует несколько операторов return в разных ветках условия для возврата разных логических значений.

      • Именование переменных0:56

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

  • Раздел собирает противника с патрулированием по заданной территории, переиспользуемый компонент здоровья для игрока и врага, обработку столкновений и урона по тегам, а также сбор монет и предметов.

    • Создание противника13:00

      Спрайт противника оформляется в переиспользуемый префаб, ему добавляются компоненты Rigidbody 2D и Circle Collider 2D, а у игрока квадратный коллайдер заменяется на Polygon Collider 2D по форме спрайта. Область патрулирования противника задаётся тремя пустыми объектами — зоной и двумя границами.

    • Движение противника8:33

      Пишется скрипт патрулирования противника: ссылки на левую и правую границы задаются публичными переменными GameObject, а направление движения хранится в булевой переменной. Скорость передаётся через Rigidbody 2D, а условие if/else в зависимости от направления присваивает объекту вектор скорости вправо или влево.

    • Ареал обитания противника3:49

      В скрипт патрулирования добавляется сравнение координаты x противника с координатами границ Left Border и Right Border. При достижении правой границы значение переменной направления меняется на false, при достижении левой — на true, а сам разворот реализован инверсией булевой переменной.

    • Здоровье персонажа10:35

      Создаётся переиспользуемый компонент Health с переменной здоровья, который добавляется и игроку, и противнику. Метод TakeHit вычитает полученный урон и уничтожает объект при падении здоровья до нуля, а метод SetHealth добавляет бонусное здоровье.

    • Настройка здоровья4:00

      Здоровье ограничивается сотней очков, игроку задаётся 100 очков, а противнику — 50, изменения переносятся в префабы. При тестировании обнаруживается, что прямая запись в переменную velocity компонента Rigidbody отключает у противника действие гравитации.

    • Получение урона6:19

      Создаётся компонент CollisionDamage с переменной урона и обработчиком OnCollisionEnter2D, отдельно настроенный для игрока и для противника. Debug.Log выявляет, что метод срабатывает и при столкновении с платформой, а не только с целевым объектом.

    • Обработка столкновений12:23

      Вводится переменная collisionTag и метод compareTag, чтобы ограничить обработку столкновений объектами с нужным тегом (Player у игрока, Enemy у противника). Доступ к компоненту Health другого объекта получают методом GetComponent, после чего вызывают его публичный метод TakeHit с величиной урона.

    • Исправление ошибок7:16

      Создаётся отдельный компонент GroundDetection с публичной переменной isGrounded, которая через методы onCollisionEnter2D и onCollisionExit2D и тег Platform отслеживает контакт объекта с платформой. Скрипт добавляется и игроку, и противнику, но пока никак не влияет на их поведение.

    • Обработка касания земли6:25

      Переменная isGrounded компонента GroundDetection связывается с поведением игрока и противника: прыжок и движение разрешены только при контакте с платформой, а ссылка на компонент передаётся через инспектор drag and drop. Разобран и альтернативный способ получить ссылку — вызов GetComponent в методе Start.

    • Сбор монеток10:07

      Создаётся собираемая монета: круглый спрайт с Circle Collider 2D и Rigidbody 2D в статичном режиме, коллайдер переключён в режим триггера. Для игрока заводится скрипт инвентаря с полем количества монет, которое увеличивается через onTriggerEnter2D при срабатывании триггера с тегом монеты.

  • Раздел разбирает работу с аниматором Unity: импорт спрайтов, машину состояний, параметры и переходы между анимациями ходьбы и прыжка персонажа.

    • Раздел показывает импорт спрайтов персонажа, создание Animator Controller и сборку анимации ходьбы, а также перевод управления персонажем на физическую основу через Rigidbody.

      • Разбор домашнего задания5:01

        Урок разбирает решение домашнего задания: уничтожение подобранного объекта через коллайдер триггера и аптечку, которая через GetComponent обращается к скрипту здоровья и начисляет бонусные очки без ограничения по максимуму.

      • Импорт спрайтов8:10

        Урок посвящён импорту спрайтов ходьбы персонажа и настройке параметров текстуры: режима Sprite 2D and UI, типа сетки Mesh Type, точки привязки Pivot и сжатия изображений через Max Size с компенсацией через Pixels Per Unit.

      • Создание аниматора5:05

        Спрайт персонажа заменяется на изображение из ходьбы, коллайдер-треугольник меняется на единый Box Collider по силуэту, а затем создаётся аниматор-контроллер с пустой анимацией Walking и таймлайном для записи кадров.

      • Создание анимации ходьбы6:00

        Спрайты ходьбы собираются в анимацию, скорость смены кадров снижается растягиванием ключевых кадров на временной шкале, а эксперимент со свойством Position показывает интерполяцию числовых значений через кривые Curves перед тем, как это свойство удаляется как лишнее.

      • Оптимизация управления8:04

        Урок вводит понятие конечного автомата аниматора — состояния Entry, Any State и Exit, параметры переходов Float, Int, Bool и Trigger — и приводит в порядок скрипт персонажа: проверка падения выносится в отдельный метод, а перемещение переводится на FixedUpdate для стабильной физики.

      • Оптимизация управления 28:24

        Управление персонажем переписывается через направление и rigidbody.velocity так, чтобы движение останавливалось без инерции, а вертикальная составляющая бралась из текущей скорости физического тела; дополнительно усиливается гравитация и настраивается сила прыжка.

    • Раздел связывает код персонажа с параметрами аниматора, настраивает переходы между покоем, ходьбой и прыжком и собирает трёхчастную анимацию прыжка — от отталкивания до приземления.

      • Параметры в анимации5:24

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

      • Программирование параметров анимации4:16

        В скрипте персонажа создаётся ссылка на компонент аниматора, а значение скорости передаётся в него методом установки числового параметра; проблема отрицательных значений при движении влево решается применением модуля числа к направлению.

      • Отражение анимации по горизонтали4:49

        Убирается задержка перед стартом анимации ходьбы через отключение exit time и обнуление transition duration, а разворот персонажа при движении влево реализуется через параметр Flip X компонента Sprite Renderer, управляемый из скрипта по знаку направления движения.

      • Три клипа анимации прыжка5:24

        Устраняется рассинхронизация между вводом и физическим циклом уменьшением параметра Fixed Timestep, а прыжок разбивается на три состояния — отталкивание, полёт и приземление, — под каждое из которых создаётся отдельный клип анимации.

      • Переходы аниматора между состояниями прыжка7:23

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

      • Исправление перехода между прыжком и падением7:25

        Вводится переменная isJumping, которая вместе с проверкой касания земли устраняет преждевременное переключение анимации старта прыжка на анимацию падения на раннем кадре прыжка.

      • Исправление двойных столкновений5:30

        Разбирается проблема зависания анимации при одновременном касании персонажем двух платформ и решается созданием отдельного дочернего коллайдера ног меньшего размера для определения контакта с землёй — приём композиции коллайдеров вместо одного точного Polygon Collider 2D.

      • Дополнение про аниматор2:16

        Урок объясняет приём защиты кода от отсутствующих ссылок на компоненты: перед обращением к ссылке, например на аниматор, добавляется проверка на null, что предотвращает ошибку выполнения при неполном наборе компонентов на объекте.

  • Раздел разбирает классы и структуры, конструкторы, свойства, статические члены, паттерн Singleton, наследование, полиморфизм, абстрактные классы, интерфейсы и инкапсуляцию — на примерах, применимых к коду игры.

    • Классы и структуры10:44

      Урок вводит понятие класса как шаблона объекта с полями и методами и показывает создание экземпляра через оператор new и конструктор. Объясняется разница между ссылочным типом класса и структурой, которая хранит значение напрямую и не может быть равна null. Задание — описать класс Cat с полями имени, возраста, веса, роста и длины хвоста и методом вывода информации, а затем превратить его в структуру.

    • Пространство имен5:56

      Урок разбирает обращение к вложенным классам и объясняет назначение пространства имён и директивы using для разделения классов с одинаковыми названиями, например при использовании сторонних библиотек. Показан пример конфликта между классом Random из Unity и из библиотеки System.

    • Конструкторы8:50

      Урок объясняет конструктор класса как метод, задающий стартовые значения полей объекта при создании, — конструктор по умолчанию и конструктор с параметрами. Разбирается использование ключевого слова this при совпадении имён параметров и полей, а также отличие конструкторов класса от конструкторов структуры.

    • Свойства7:34

      Урок вводит свойства как замену методов get и set для доступа к приватным полям, включая проверки значений в блоке set и раздельные модификаторы доступа для чтения и записи. Показаны автоматические свойства и сокращённая запись свойства только для чтения.

    • Статические классы и методы7:49

      Урок объясняет разницу между статическими методами, вызываемыми по имени класса без создания экземпляра, и обычными методами, требующими экземпляра объекта. Разбираются ограничения статического класса: в нём нельзя объявлять нестатические поля и методы и создавать его экземпляр.

    • Паттерн Singleton4:30

      Урок разбирает паттерн Singleton — статическое свойство instance, хранящее единственный экземпляр класса на сцене, и инициализацию этого свойства в методе start. Показано, что непредсказуемый порядок вызова start у разных скриптов может привести к обращению к ещё не инициализированному instance и ошибке nullReferenceException.

    • Awake и продолжение Singleton4:48

      Урок показывает, что метод awake вызывается раньше start, поэтому инициализация Singleton в awake исключает обращение к ещё пустой ссылке instance. Разбирается порядок вызова методов Unity (awake, start, update, lateUpdate) и приём группировки кода директивами #region. Задание — переделать скрипт PlayerInventory под паттерн Singleton, убрав метод OnTriggerEnter2D и перенеся начисление монет в скрипт Player через обращение к instance.

    • Наследование8:28

      Урок объясняет наследование на примере классов Animal и Dog: класс-наследник получает публичные поля и методы родителя, но не имеет доступа к его приватным методам. Отмечается, что все классы неявно наследуются от базового класса SystemObject, откуда берутся методы Equals, GetHashCode, GetType и ToString.

    • Родительские классы Unity5:45

      Урок показывает цепочку наследования собственных скриптов от MonoBehaviour через Behaviour и Component до UnityEngine.Object и объясняет происхождение привычных методов и свойств компонентов. Разбираются свойства и методы каждого уровня цепочки — от Enabled и GetComponent до Destroy и Instantiate.

    • Полиморфизм6:13

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

    • Абстрактные классы и интерфейсы10:37

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

    • Инкапсуляция6:05

      Урок объясняет инкапсуляцию как сокрытие полей класса от прямого изменения снаружи: приватные и protected-модификаторы ограничивают доступ, а свойства с проверками в блоке set контролируют присваиваемые значения. Показан атрибут SerializeField, который отображает приватное поле в инспекторе Unity, не открывая доступ к нему из кода.

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

    • Разбор ДЗ – анимация волка6:01

      Разбирается домашнее задание по анимации ходьбы волка: создаётся отдельный Animator Controller с состоянием Walking, вместо полигонального коллайдера настраивается Box Collider, а для разворота спрайта по направлению движения переиспользуется логика FlipX из скрипта игрока, определяющая направление по знаку скорости Rigidbody.

    • Разбор ДЗ – анимация укуса8:20

      Разбирается анимация укуса волка: вводится общий триггер урона в аниматоре, а сам вызов урона переносится из проверки столкновения в отдельный публичный метод, который запускается анимационным событием в момент укуса. Ссылка на компонент Health кэшируется и проверяется на null, что защищает от повторного урона и ошибок при столкновении с объектами без этого компонента.

    • Разбор ДЗ — анимация укуса 29:33

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

    • Разбор ДЗ — анимация укуса 38:40

      Исправляется ошибка, при которой противник кусает игрока в прежнем направлении движения, даже если тот подошёл со спины: переменная направления в скрипте урона становится публичным свойством только для чтения, а скрипт патрулирования переписывается с учётом стороны, с которой находится противник. В результате противник поворачивается лицом к игроку независимо от направления подхода.

    • Создание стрельбы9:30

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

    • Стрельба8:44

      Настраивается точка появления стрелы через дочерний Transform на персонаже, а созданному объекту стрелы задаётся импульс методом SetImpulse с направлением и силой, пропорциональной силе прыжка. Проблема прохождения быстрых стрел сквозь противника решается переключением Collision Detection на Continuous, а для стрелы создаются анимации Flying и Damage с переходом по параметру Direction.

    • Корутины4:11

      Вводится понятие корутины — метода, выполнение которого может растягиваться во времени, в отличие от обычных методов Unity, отрабатывающих в один кадр. На примере вывода большого числа сообщений в консоль по нажатию клавиши показывается, что выполнение объёмной операции целиком за один кадр вызывает подвисание игры, а решением называется распределение действий во времени с помощью корутин.

    • Время жизни стрелы9:37

      Разбирается механизм корутин через интерфейс IEnumerator и конструкцию Yield Return с разными видами ожидания — WaitForSeconds, WaitForSecondsRealtime, WaitForEndOfFrame и WaitForFixedUpdate. На практике создаётся корутина, которая ждёт заданное время и уничтожает объект стрелы, обеспечивая её автоматическое исчезновение с поля.

    • Композиция и наследование7:21

      Сравниваются наследование и композиция на примере кода персонажа и стрелы, после чего стрела переделывается с материального столкновения на триггер: убирается прежний скрипт, наносивший урон только через анимацию, и создаётся отдельный компонент с методом OnTriggerEnter2D, который получает компонент Health противоположного объекта и наносит урон при касании.

    • Поворот стрелы10:36

      Настраивается автоматическое уничтожение стрелы при столкновении через переменную isDestroyingAfterCollision, а чтобы стрела не реагировала на породивший её объект, ей передаётся ссылка на родителя с проверкой перед выполнением урона. Направление полёта стрелы привязывается к повороту персонажа через flipX, а для разворота стрелы влево используется поворот объекта по оси Y через Quaternion.Euler, поскольку её коллайдер несимметричен.

  • Раздел разбирает источники нагрузки на процессор, а затем заменяет повторяющиеся вызовы GetComponent и Instantiate пулом объектов и словарём GameManager; отдельно собирается система баффов.

    • Введение в оптимизацию9:18

      Урок объясняет, как процессор и видеоядро формируют кадр игры, и вводит понятие бюджета времени на кадр при 60 кадрах в секунду. Разбираются основные источники нагрузки на процессор в мобильных играх: методы Update, создание объектов и работа сборщика мусора, а также встроенные методы GetComponent, Instantiate и FindObjects.

    • Избавление от GetComponent9:35

      Урок разбирает лишний вызов GetComponent после Instantiate в коде стрельбы персонажа и показывает, как получать ссылку на нужный компонент сразу при создании объекта — передачей в Instantiate типа компонента вместо GameObject. Также объясняется, когда обилие компонентов MonoBehaviour на объекте создаёт проблему для производительности, а когда нет.

    • Избавление от Instantiate7:38

      Урок показывает переход от создания стрел через Instantiate при каждом выстреле к их переиспользованию через пул на основе List. Разбирается, почему для пула не подходит массив, и создаётся список стрел, которые заранее создаются, отключаются методом SetActive(false) и размещаются внутри Arrow Spawn Point.

    • Работа с пулом игровых объектов11:42

      Урок подключает подготовленный пул к игровому процессу: реализуются методы получения стрелы из пула и её возврата обратно вместо удаления. Для универсального уничтожения объектов создаётся интерфейс IObjectDestroyer, который скрипт Arrow использует, чтобы возвращать себя в пул через ссылку на класс Player.

    • Создание GameManager9:43

      Урок вводит централизованный объект GameManager с паттерном Singleton, который через словарь заранее собирает ссылки на компоненты Health со всех объектов сцены. Первый способ заполнения словаря — поиск всех компонентов методом FindObjectsOfType и добавление их в словарь циклом foreach; отмечается, что такой способ увеличивает время загрузки сцены.

    • Работа с Dictionary4:14

      Урок показывает переход от поиска компонентов методом GetComponent к их регистрации в словаре GameManager: скрипт Health сам добавляет себя в словарь при инициализации сцены. В скрипте TriggerDamage проверка на null заменяется проверкой наличия ключа методом ContainsKey, а для работы синглтона создаётся объект GameManager, упакованный в префаб.

    • Исправление платформ и анимация монет10:14

      Урок устраняет залипание персонажа на платформах при помощи компонента Platform Effector 2D с настроенным углом взаимодействия, чтобы срабатывание происходило только сверху. Дорабатывается анимация монеты: подбирается новый спрайт и его размер, добавляется зацикленное мерцание и покачивание относительно родительского объекта, чтобы монеты не сводило в одну точку.

    • Синхронизация монет с GameManager6:49

      Урок добавляет монете анимацию исчезновения через Animation Event, который по завершении анимации уничтожает объект. Сбор монет переводится с проверки по тегу на использование словаря CoinContainer в GameManager: скрипт Coin регистрирует себя в контейнере, а PlayerInventory проверяет принадлежность объекта методом ContainsKey перед увеличением счётчика.

    • Графическое оформление уровня9:34

      Урок посвящён визуальному оформлению уровня: спрайты платформ заменяются на изображения грибов с настройкой масштаба, точки опоры, слоя отрисовки и коллайдера Edge Collider 2D. Задний фон привязывается к игроку как дочерний объект со сдвинутым слоем отрисовки, а коллайдер персонажа корректируется, чтобы устранить ощущение левитации при ходьбе.

    • Система баффов9:09

      Урок описывает архитектуру системы игровых баффов: объект-источник, который накладывает баф, и скрипт-приёмник, который меняет параметры персонажа — скорость, урон, силу прыжка. Вводятся аддитивный и мультипликативный способы изменения параметра, перечисление для разделения типов баффов и атрибут Serializable, чтобы поля класса Buff отображались в инспекторе Unity.

    • Описание баффов4:58

      Урок продолжает систему баффов реализацией приёмника BuffReceiver, который хранит применённые бафы в списке. Начисление и снятие бафа происходят через триггерные события OnTriggerEnter2D и выход из триггера, с проверками на дублирование в списке перед добавлением и на присутствие бафа перед удалением.

  • Раздел разбирает устройство UI Unity — Canvas, Rect Transform и компоненты интерфейса — и доводит их до рабочих экранов: шкалы здоровья, меню и сохранения имени игрока.

    • Раздел вводит устройство Canvas и Rect Transform, программирование текстовых полей и кнопок и собирает анимированную шкалу здоровья персонажа.

      • Введение в пользовательский интерфейс (UI)7:35

        UI-элементы в Unity — объекты сцены с компонентом Rect Transform и позиционированием по якорям, обязательно вложенные в Canvas. Рассматриваются три режима отображения Canvas: Screen Space Overlay закрепляет интерфейс поверх экрана, World Space размещает элементы в мировых координатах сцены, а Screen Space Camera подстраивается под камеру с регулировкой удалённости через Plane Distance.

      • Настройка Canvas7:40

        Разбирается компонент Canvas Scaler и его режимы масштабирования интерфейса под разные разрешения и соотношения сторон экранов — Constant Pixel Size, Constant Physical Size и Scale With Screen Size с эталонным разрешением. Показана настройка якоря и пайвота, которая удерживает текстовый элемент в углу экрана при смене соотношения сторон.

      • Работа с UI в коде3:49

        Текстовое поле счётчика монет донастраивается визуально, а затем через скрипт PlayerInventory программируется вывод и обновление числа собранных монет в компоненте Text с помощью подключения библиотеки UnityEngine.UI. Текст обновляется конкатенацией строк в обработчике OnTriggerEnter2D при подборе предметов персонажем.

      • Кнопка (Button)8:29

        Создаётся интерфейсная кнопка на Canvas, её внешний вид настраивается через компонент Image, а поведение — через компонент Button с параметрами Interactable и Transition. Публичный метод в скрипте GameManager привязывается к событию OnClick и обнуляет Time.timeScale, реализуя паузу и возобновление игры повторным нажатием.

      • Content Size Filter9:43

        Разбирается компонент Content Size Filter, который меняет размер UI-объекта в зависимости от содержимого, на примере счётчика монет с иконкой — настраиваются раздельные параметры по горизонтали и вертикали и отключается автоматическое сжатие шрифта Best Fit. Число монет выводится через приведение целого значения к строке методом ToString().

      • Создание HealthBar6:16

        Изображение полосы здоровья подготавливается для растяжения: в Sprite Editor размечаются границы нерастягиваемой зоны, а в Sprite Renderer режим отрисовки переключается с Simple на Sliced. Тип меша спрайта переводится в FullRect, в результате получается спрайт, растягивающийся по горизонтали без искажений краёв.

      • Настройка Image3:54

        Шкала здоровья собирается из подложки и заполняемой дочерней части на компонентах Image с включённым режимом Filled. Настраиваются Fill Method, Fill Origin и Fill Amount, выбирается горизонтальное заполнение слева направо для отображения текущего здоровья.

      • Программирование прогрессбаров5:51

        Создаётся скрипт HealthBar, который считывает здоровье персонажа через Singleton или FindObjectOfType и в методе Update обновляет заполнение шкалы делением текущего здоровья на максимальное значение. Разбирается ошибка целочисленного деления, из-за которой делитель записывается как дробное число с суффиксом f.

      • Анимация прогрессбаров7:48

        Резкое изменение шкалы здоровья заменяется плавной анимацией через вспомогательную переменную HealthValue, которая на каждом кадре приближается к реальному значению здоровья на шаг Delta. Разбирается ошибка сравнения целого значения здоровья с дробным HealthValue и вводится переменная currentHealth; отмечается возможность использовать вместо метода Update корутину.

    • Раздел собирает сцену игрового меню с кнопками «Играть» и «Выход», переходы между сценами и сохранение имени игрока через PlayerPrefs.

      • Верстка меню8:58

        Создаётся сцена игрового меню с фоновой панелью, растянутой по размерам Canvas, и кнопками «Играть» и «Выход», расположенными в контейнере с компонентом VerticalLayoutGroup. Разбирается отличие GridLayoutGroup, HorizontalLayoutGroup и VerticalLayoutGroup, а положение кнопок настраивается через Child Alignment.

      • Layout Group Components5:09

        Разбираются параметры Vertical Layout Group — Child Force Expand, Control Child Size и Spacing — для настройки расположения кнопок меню, а также применение Content Size Fitter и Layout Element для подстройки размеров объектов. Показано добавление сцен проекта в список Scenes in Build с указанием стартовой сцены меню.

      • Программирование меню4:23

        Пишется скрипт меню с публичными методами для кнопок «Играть» и «Выход»: метод onClickPlay через класс SceneManager загружает игровую сцену методом LoadScene по номеру или названию, а метод выхода вызывает Application.Quit. Методы привязываются к кнопкам через список событий OnClick.

      • PlayerPrefs и InputField10:52

        Настраивается поле ввода Input Field для имени персонажа, а введённое значение сохраняется на устройстве через класс PlayerPrefs методом SetString по событию OnEndEdit. При старте сцены сохранённое значение проверяется методом HasKey и подгружается в поле методом GetString.

  • Раздел строит базу данных предметов на ScriptableObject с собственным редакторским интерфейсом, интерфейс ячеек инвентаря и применение бафов от предметов через делегат Action.

    • ScriptableObject8:56

      Разбирается отличие ScriptableObject от MonoBehaviour как самостоятельного файла данных. Создаётся скрипт предмета Item с полями id, item name, description, buff type и value, а атрибут CreateAssetMenu добавляет создание такого предмета через меню Create в редакторе Unity.

    • ScriptableObject в базах данных8:11

      Показывается, как ссылка на ScriptableObject передаётся в другой компонент для обращения к данным предмета из кода. Создаётся класс-контейнер ItemBase, хранящий список предметов вместо отдельных файлов, с методами создания и удаления элементов.

    • Разработка базы данных предметов8:54

      Добавляется навигация по списку предметов через currentIndex методами nextItem и previousItem. Создаётся Editor-скрипт с переопределённым методом OnInspectorGUI, который добавляет в инспектор базы данных кнопки создания, удаления и перехода между предметами.

    • Написание Editor скрипта3:24

      В базу данных через кнопки редакторского интерфейса добавляется несколько предметов с разными параметрами. Кнопки управления группируются в горизонтальный ряд методами GUILayout.BeginHorizontal и EndHorizontal вместо вертикального списка.

    • Работа с базой данных8:06

      Создаётся компонент ItemComponent, который получает данные предмета из базы по идентификатору, обёрнутому в перечисление ItemType. В GameManager добавляется поиск элемента по ID циклом и через лямбда-выражение в методе Find, а в базу добавляется поле спрайта для отображения иконки предмета.

    • Добавление предметов в инвентарь10:10

      На основе префаба монетки создаётся префаб зелья с компонентом ItemComponent, подключённый к базе данных через GameManager. В GameManager заводится словарь предметов, скрипт инвентаря проверяет столкновение с объектом из словаря и добавляет предмет в список собранных, удаляя его со сцены через интерфейс уничтожения объекта.

    • Интерфейс инвентаря6:07

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

    • Контроллер инвентаря10:00

      Создаётся Inventory UI Controller, который получает список предметов из Player Inventory через Game Manager и заполняет ячейки интерфейса. Открытие панели привязывается к кнопке паузы, ячейки собираются через Instantiate по префабу, а инициализация переносится из Start в onEnable, чтобы устранить ошибку отображения предметов при повторном открытии окна.

    • Делегат Action9:53

      На игрока добавляется компонент Buff Receiver, а в ячейке создаётся метод OnClickSell, который применяет предмет к игроку по нажатию кнопки и удаляет его из инвентаря. Вместо постоянной проверки бафов в Update вводится делегат Action, на который подписывается тестовый метод игрока.

    • Обработка нажатий ячеек2:33

      На кнопку ячейки через Unity-события привязывается метод OnClickCell, который удаляет предмет из данных Game Manager и передаёт баф в Buff Receiver игрока методом addBuff. Buff Receiver добавляет баф в список при его отсутствии и вызывает делегат, который срабатывает только при изменении бафов, а не каждый кадр.

    • Домашнее задание: бафы и инвентарь1:29

      Домашнее задание: переименовать тестовый метод обработки бафов и добавить игроку поля Force Bonus, Armor Bonus и Damage Bonus, влияющие на базовые переменные Force, Damage и Health. Также нужно доработать Inventory UI Controller через Action, чтобы нажатие на ячейку обновляло весь список предметов интерфейса.

  • Раздел вводит систему контроля версий — репозиторий на GitLab, работу в SourceTree и ветки Git — и переводит управление персонажем на экранные кнопки для мобильных устройств.

    • Разбор ДЗ8:48

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

    • Разбор ДЗ 23:53

      Урок продолжает разбор домашнего задания: показано применение бонуса силы к прыжку персонажа, бонуса здоровья при использовании зелья и бонуса урона при выстреле стрелой. Работа каждого бафа проверяется в игре сравнением результата со стандартным поведением персонажа.

    • Введение в систему контроля версий11:05

      Урок вводит понятие системы контроля версий и её клиент-серверную структуру, показывает регистрацию в GitLab и создание приватного репозитория проекта. Также разбирается создание файла gitignore для Unity через сервис gitignore.io, чтобы локальные файлы сборки и настроек среды разработки не попадали на сервер.

    • Работа с SourceTree8:29

      Урок объясняет базовый цикл работы с SourceTree: создание локального репозитория, коммит и отправка изменений в GitLab. Также показан просмотр истории коммитов и переключение между версиями проекта.

    • Ветки в Git9:37

      Урок объясняет работу с ветками Git: создание отдельной ветки, независимую разработку в ней и слияние с основной веткой master. Разбирается природа конфликта слияния и его разрешение через выбор нужной версии файла.

    • Верстка экранного управления9:56

      Урок показывает вёрстку экранных кнопок управления — движение, прыжок, стрельба — на Canvas для мобильных устройств. Поскольку стандартный компонент Button не отслеживает удержание, для кнопок пишется собственный скрипт с обработкой нажатия и отпускания через Event Trigger, а данные о нажатых кнопках выносятся в отдельный контроллер ввода.

    • Создание контроллера для экранных кнопок6:30

      Урок показывает, как вызывать методы персонажа из UI-кнопок через код вместо ручного назначения onClick в редакторе, используя подписку AddListener и передачу ссылки на контроллер через существующий Singleton-паттерн. Логика прыжка выносится в отдельный метод, а FixedUpdate разбивается на более читаемые блоки.

    • Экранирование кода7:23

      Урок переносит управление с клавиатуры на экранные кнопки через контроллер и объясняет условную компиляцию кода под редактор, которая исключает отладочный ввод с клавиатуры из финальной сборки. Логика перемещения выносится в отдельный метод Move, а проверка прыжка переносится из FixedUpdate в Update.

    • Экскурс в Particle System7:12

      Урок знакомит с системой Particle System на примере бесплатного набора эффектов Particle Pack и показывает, что для визуальных эффектов удобнее использовать готовые префабы, а не создавать их самостоятельно. Также разбирается влияние партиклов на производительность и сложность их встраивания в интерфейс.

    • Про поиск информации8:41

      Урок разбирает устройство компонента Particle System и его основные настройки — цвет, время жизни, предпрогрев и зацикливание, а также роль рендерера и сортировочных слоёв в порядке наложения эффекта. Показано, где искать техническую информацию по Unity и C#: официальная документация, справочники и книги.

  • Раздел исправляет типовые ошибки проекта — анимацию и отскок при уроне — собирает тестовый APK под Android и разбирает трудоустройство в геймдеве, монетизацию и публикацию в Google Play.

    • Исправление ошибок8:47

      Урок разбирает исправление двух ошибок проекта: ложный переход в анимацию падения при ходьбе по платформам и отсутствие визуальной реакции персонажа на полученный урон. Ложное срабатывание устраняется заменой метода завершения столкновения на метод удержания контакта, а реакция на урон реализуется через новое состояние аниматора со сменой спрайтов и кратковременным изменением цвета персонажа.

    • Исправление ошибок, часть 212:56

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

    • Сборка проекта под Android9:54

      Урок показывает подготовку и сборку Unity-проекта под Android: установку Android SDK и NDK через Unity Hub, переключение платформы в настройках сборки и настройку параметров проекта в Player Settings — названия, иконки, имени пакета, минимальной версии Android и целевой архитектуры процессора. В итоге получается тестовый APK-файл для установки на устройство.

    • Рекомендации по трудоустройству12:03

      Урок даёт рекомендации по трудоустройству в геймдеве для программистов и геймдизайнеров: описывает реальные обязанности этих специальностей — написание скриптов и настройку префабов у программиста, разработку концепции, механик и баланса у геймдизайнера. Также разбирается формирование портфолио через публикацию проектов на GitHub, GitLab или в Play Market, поиск вакансий и особенности собеседования на позицию джуниора.

    • Введение в маркетинг геймдева12:34

      Урок знакомит со способами монетизации мобильных игр — продажей, внутриигровыми покупками по модели free-to-play и рекламой, включая вознаграждаемые просмотры. Также вводятся метрики оценки успешности проекта: ARPU, ARPPU и показатели вовлечённости DAU, WAU, MAU и Retention.

    • Монетизация игры13:56

      Практический урок показывает подключение сервиса Unity Ads к проекту: импорт плагина Unity Monetization через Asset Store, настройку рекламы во вкладке Services и в Unity Dashboard. Разбирается готовый скрипт показа вознаграждаемого видео с настройкой Placement ID и Game ID для iOS и Android.

    • Публикация игры8:49

      Урок показывает процесс публикации приложения в Google Play: регистрацию аккаунта разработчика, заполнение карточки приложения — названия, описания, иконки, скриншотов и рекламного изображения, настройку тегов и возрастного рейтинга. Также разбирается создание политики конфиденциальности через внешний бесплатный сервис.

    • Загрузка apk и Unity IAP3:33

      Урок описывает завершающий этап подготовки приложения к публикации: загрузку исполняемого APK-файла, создание релиза и прохождение проверки модератором Google Play. Отдельно разбирается подключение покупок внутри приложения через коды продуктов Google Play и Apple, которые размещаются в коде проекта для оплаты через API Google.

Частые вопросы

Здесь собраны ответы почти на все вопросы, которые задают перед покупкой. Нажмите на вопрос, чтобы раскрыть ответ.

Об этом курсе

  • Нет — курс начинается с установки Unity и объяснения базовых понятий C# с нуля: типов данных, переменных, условий и циклов.

  • C# в среде JetBrains Rider или Visual Studio — разница между ними в основном в объёме подсказок при наборе кода.

  • Нет, все механики курса двумерные — 2D-физика, 2D-коллайдеры, спрайты. Сетевой игры и мультиплеера тоже нет, проект остаётся однопользовательским.

  • Сборка под iOS в курсе почти не выполняется — она только упоминается как отдельный путь, требующий компьютера с macOS и лицензии разработчика Apple.

  • Каждое задание загружается отдельной карточкой под видео, куратор проверяет его в чате и присылает правки, а после сдачи работа становится видна другим ученикам потока.

  • Курс показывает процесс публикации — регистрацию аккаунта разработчика, карточку приложения и политику конфиденциальности — на уровне демонстрации, а не как доведённый до магазина коммерческий проект: регистрация аккаунта разработчика Google Play требует отдельной платной процедуры вне курса.

Доступ и материалы

  • Сразу после оплаты, в ту же секунду и автоматически. Ждать подтверждения не нужно. Доступ приходит двумя путями сразу. Первый: на почту, указанную при оформлении заказа, приходит письмо со ссылкой на материалы. Второй: та же ссылка появляется в вашем аккаунте на сайте, в разделе «Загрузки», и остаётся там постоянно.

  • Все видео и дополнительные файлы лежат в облачном хранилище. Ссылка на него — в вашем аккаунте на сайте, раздел «Загрузки», и в письме, которое пришло после оплаты. Аккаунт здесь — не формальность, а способ доставки: курс остаётся в нём навсегда. Даже если письмо потерялось или вы вспомнили о покупке через год, ссылка будет на месте.

  • Скачивать можно и нужно. Мы рекомендуем сохранить видео на компьютер и смотреть оттуда. Причина простая: облачное хранилище не рассчитано на просмотр видео. Иногда оно позволяет включить ролик прямо в браузере, но качество при этом заметно хуже исходного. На своём компьютере вы увидите курс таким, каким его записывали.

  • Бессрочно. Курс остаётся вашим навсегда, возвращаться к нему можно сколько угодно раз. Если через год или два ссылка вдруг перестанет открываться по техническим причинам — напишите на info@siluette.com.ua, мы её восстановим.

  • Прежде всего: доступ у вас есть в любом случае. Войдите на сайт и откройте раздел «Загрузки» — ссылка на курс уже там, независимо от того, дошло письмо или нет. Чаще всего письмо теряется из-за опечатки в адресе при оформлении заказа. Ещё стоит заглянуть в папку «Спам». Не разбирается — не тратьте время: напишите на info@siluette.com.ua или в чат в правом нижнем углу сайта, мы поможем.

  • Лучше всего на компьютере или ноутбуке: скачайте видео и откройте любым привычным плеером. Понадобятся установленные видеокодеки — на большинстве компьютеров они уже есть. Скачать курс можно на сколько угодно устройств. А вот телефон мы не советуем, и по двум причинам. На маленьком экране плохо видно детали, особенно если в уроке показывают интерфейс программы. И на телефонах часто нет кодеков для форматов, в которых записаны видео.

Оплата и возврат

  • Банковской картой Visa, MasterCard или Prostir, через Google Pay, Apple Pay, Masterpass, Visa Checkout, платёжный QR-код, Botpay в Telegram или Privat24. Есть и оплата частями: Монобанк (3 или 4 платежа), А-Банк (2, 3 или 4 платежа и рассрочка), Банк Глобус (8 платежей), «Скибочка» от OTP Bank (3 платежа), мгновенная рассрочка и оплата частями от ПриватБанка.

  • Да. Платёжная система принимает карты из Евросоюза и любых других стран. Одна деталь, о которой часто забывают: банк может попросить подтвердить платёж — в мобильном приложении или кодом из СМС. Если оплата не проходит, проверьте приложение банка и сообщения.

  • Добавьте в корзину два курса или больше — скидка применится автоматически ко всем товарам в корзине. Два курса: минус 20% на оба. Пять курсов: минус 20% на все пять. Скидка сочетается с любыми акционными ценами и действует на весь каталог без исключений.

  • Цифровые товары возврату и обмену не подлежат. Это общее правило для всех электронных товаров в Украине — постановление Кабинета Министров № 172 от 19 марта 1994 года. При этом мы всегда на связи. Если доступ не открывается, ссылка перестала работать или файлы повреждены — напишите на info@siluette.com.ua, укажите дату и номер заказа. Восстановим. Если что-то непонятно в самом курсе, тоже пишите — подскажем.

  • Пока нет. Мы работаем только с частными покупателями — безналичной оплаты по счёту от юридических лиц сейчас нет.

Как проходит обучение

  • Нет. Все курсы — это записи уроков для самостоятельного изучения: преподаватель не отвечает на вопросы и не проверяет домашние задания. Именно поэтому курсы стоят намного дешевле обучения с куратором. Вы получаете тот же материал, но занимаетесь сами и в своём темпе.

  • Да, цифровой сертификат — по запросу и бесплатно. Напишите на info@siluette.com.ua, укажите имя и фамилию ровно в том виде, в каком хотите видеть их в сертификате, и мы пришлём его в течение суток.

  • Для большинства курсов — нет. Они рассчитаны на начальный уровень и объясняют с азов. Если курс требует подготовки, это сказано в его описании.

  • Нет. Ни дедлайнов, ни расписания, ни сгорающего доступа. Скачали — смотрите когда удобно, с любыми перерывами.

  • Курс покупается для личного использования, и мы просим относиться к этому по-человечески: за каждым уроком стоит работа, а цена и так сильно снижена.

Поддержка

  • Лучше всего на info@siluette.com.ua. Есть и чат в правом нижнем углу сайта, но почта надёжнее: там можно всё описать подробно и приложить скриншоты. Просьба: опишите, что именно вы делали и что пошло не так, и приложите снимок экрана с ошибкой. Так мы решим вопрос сразу, а не будем полдня выяснять, что произошло.

  • В рабочее время, с 9:00 до 19:00, на почту обычно отвечаем в течение часа, в чате — за пару минут. После 19:00 тоже случается, но время ответа не обещаем.

Отзывы покупателей

  1. Марина

    24.07.2025 Подтвержденный клиент

    Я полный новичок, и этот курс помог мне "войти в геймдев". Объясняют все с нуля. Сделал свою первую 2D-игру! Я в восторге!

  2. Сергей

    23.04.2025 Подтвержденный клиент

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

  3. Егор

    01.09.2024 Подтвержденный клиент

    Это просто энциклопедия для Unity-разработчика! Разбирают абсолютно все, от программирования на C# до публикации игры. Очень полный курс.

  4. Игорь

    15.04.2024 Подтвержденный клиент

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

  5. Елена

    06.04.2024 Подтвержденный клиент

    Понравилось, что есть блок по Git. Это то, что отличает профи. Учат сразу работать правильно. Очень полезно.

Показано 5 из 5

Оставить отзыв