Урок 1. Введение
Урок 2. Установка необходимого ПО
Упражнения:
- Скачайте и установите лаунчер.
- Установите Unreal Engine 5.
- Установите Visual Studio.
- Создайте ThirdPerson-проект на C++ в Unreal Engine 5 и убедитесь, что всё работает.
Урок 3. Установка и настройка clang-format
Упражнения:
- Настройте clang-format.
- Убедитесь, что clang-format работает.
Урок 4. Создание первого проекта
Упражнения:
- Создайте новый FirstPerson-проект на C++.
- Тщательно изучите каждую строчку кода.
Урок 5. Как работает движок изнутри?
Упражнения:
- Изучите, какие модули подключены в Build.cs, посмотрев описание каждого из них в справочнике на сайте Михаила Русакова
Урок 6. Рефакторинг шаблона от третьего лица
Упражнения:
- Перенесите все h-файлы в директорию public, а cpp-файлы в директорию private.
- Убедитесь, что после рефакторинга и переноса файлов ничего не сломалось.
- Создайте класс типа AActor с любым названием.
- Вытащите на сцену экземпляр созданного класса.
Урок 7. Создание C++ класса
Упражнения:
- На BeginPlay создайте и проинициализируйте 5 переменных подходящего типа для: строки, которая будет показываться игроку, здоровья, выносливости, количества собранных монет, местоположения игрока. Примечание: задание имеет несколько правильных решений. Например, для здоровья можно использовать и uint32, и float, но не FVector или FName.
Урок 8. Типы данных
Упражнения:
- На BeginPlay создайте и проинициализируйте 5 переменных подходящего типа для: строки, которая будет показываться игроку, здоровья, выносливости, количества собранных монет, местоположения игрока. Примечание: задание имеет несколько правильных решений. Например, для здоровья можно использовать и uint32, и float, но не FVector или FName.
Урок 9. Логирование
Упражнения:
- На BeginPlay выведите на экран значения всех 5 переменных, созданных ранее.
- На Tick выводите в лог значения всех 5 переменных, созданных ранее.
Урок 10. Макрос UPROPERTY
Упражнения:
- Создайте переменную класса любого типа, чтобы она могла настраиваться только в BP-классе.
- Создайте переменную класса любого типа, чтобы она могла настраиваться только в экземпляре класса на сцене.
- Создайте переменную класса любого типа, чтобы она отображалась только в ClassDefaults и была не доступной для изменения.
- Создайте переменную класса любого типа, чтобы к ней можно было обратиться через Blueprint (как на чтение, так и на запись).
Урок 11. Construction Script в C++
Упражнения:
- Добавьте UStaticMeshComponent* в класс.
- Добавьте переменную типа FRotator, сделав её редактируемой у любого экземпляра на сцене.
- При редактировании FRotator в редакторе должен сразу меняться поворот у StaticMeshComponent.
Урок 12. Макрос UFUNCTION
Упражнения:
- Создайте простую функцию, просто выводящую в лог строку «My Function», которую можно будет переопределить в Blueprint.
- В BP-реализации созданной функции необходимо вызвать базовую логику, плюс добавить вывод на экран строки «My BP-Function».
Урок 13. Asserts
Упражнения:
- Добавьте проверки check на все указатели, которые используются в Вашем коде, включая код из шаблона FirstPerson.
Урок 14. Структуры
Упражнения:
- Создайте структуру с переменными следующих типов: UStaticMesh* и UMaterial*.
- Добавьте новую переменную в класс Вашего Actor с типом созданной структуры с возможностью её настройки у экземпляра класса на сцене.
- В OnConstruction считайте данные из структуры и установите их в переменную типа UStaticMeshComponent*. Примечание: для установки материала можно использовать функцию SetMaterial в UStaticMeshComponent.
- Убедитесь, что, когда Вы в редакторе меняете StaticMesh или материал у переменной типа структуры, у Вас автоматически меняется и сам StaticMeshComponent.
Урок 15. Перечисления
Упражнения:
- Создайте 3 простых материала со следующими BaseColor: красный, зелёный и синий.
- Создайте перечисление в C++ со следующими значениями: Red, Green, Blue.
- Настройте свой Actor так (добавив переменную, прописав нужную логику), чтобы при выборе значения перечисления в редакторе, автоматически у StaticMesh менялся материал на соответствующий. То есть, если был выбран, например, Green, на StaticMesh должен наложиться зелёный материал.
Урок 16. Делегаты
Упражнения:
- Добавьте UBoxComponent* в класс персонажа.
- Сделайте так, чтобы при пересечении компонента UBoxComponent* с любым экземпляром созданного Вами класса типа AActor на сцене, он исчезал, а в лог выводилась строка: «Item has been taken».
- Добавьте переменную в класс персонажа, которая должна будет увеличиться на 1 вместе с собиранием предметов на сцене.
Урок 17. Виджеты
Упражнения:
- Добавьте делегат в Ваш класс персонажа, который будет вызываться, когда подобран очередной предмет. В качестве дополнительного параметра делегата будет подаваться общее количество собранных предметов.
- Сделайте виджет в C++ с текстовым блоком.
- В качестве логики виджета подпишитесь на созданный ранее делегат, и обновляйте текстовый блок числом, соответствующим количеству собранных игроком предметов.
- Сделайте простейший дизайн для виджета.
- Создайте C++класс, как наследника от AHUD, с переменной: TSubclassOf HUDWidgetClass.
- На BeginPlay у созданного в предыдущем задании класса должен появиться виджет, соответствующий переменной HUDWidgetClass, и отобразиться на экране.
- Создайте BP-наследника от созданного класса, а также укажите правильное значение для переменной HUDWidgetClass. Примечание: не забудьте про GameMode.
- Убедитесь, что виджет появился, и он отображает количество собранных предметов, и это число увеличивается всякий раз на 1, когда подбирается очередной предмет.
Урок 18. Таймеры
Упражнения:
- В классе персонажа создайте функцию, которая должна запускаться каждые 10 секунд и в ней количество собранных предметов должно уменьшаться на 1. Примечание: меньше 0 количество предметов становиться не должно, а также не забудьте вызывать делегат, чтобы обновлялся виджет.
Урок 19. Delay
Упражнения:
- Сделайте задержку в 1 секунду в виджете после получения уведомления от делегата и перед изменением текстового блока. Примечание: то есть игрок собирает предмет, а виджет должен обновиться на экране только через 1 секунду.
Урок 20. Интерфейсы
Упражнения:
- Создайте интерфейс, который должен будет реализовать класс персонажа.
- Перенесите в интерфейс делегат из класса персонажа.
- Создайте функцию в интерфейсе, которая возвращает ссылку на делегат.
- Реализуйте интерфейс в классе персонажа.
- Перепишите класс виджета так, чтобы он зависел только от созданного интерфейса и не зависел от класса персонажа.
- Убедитесь, что всё по-прежнему работает.
Урок 21. Заключение