# Практическая работа Данный проект будет выполнятся в течении всего курса. ## Домашняя работа к уроку 3 (Система боя) 1. Убирать монетку при соприкосновении с игроком. Использовать метод, который за это отвечает и применить его в нужном месте. 1. Создать новый тип бонуса на уровне - аптечки, которые могут хранить разную величину лечения. При соприкосновении аптечки с любым объектом, содержащим компонент Health, аптечка должна добавить объекту величину лечения и пропасть с игровой сцены. ## Домашняя работа к уроку 4 (Анимация в Unity) 1. Создать из спрайтов две анимации для противника (волка): ходьба и укус. Настроить переходы между этими анимациями в аниматоре волка. 1. Добавить необходимые параметры и запрограммировать их так, чтобы волк двигался и при столкновении с персонажем кусал его. Допускается небольшое отставание от момента укуса до анимации укуса. Графику для игры скачивайте [отсюда](https://drive.google.com/drive/folders/1f23vJ4d-v7M-KU84uaADfBHvAWNfQAQK?usp=sharing) Проект урока с настроенными скриптами и анимацией скачивайте [здесь](https://drive.google.com/drive/folders/1ORgco-TY-jYP1k2HNAspxxVEMfubD2Ej?usp=sharing) ## Домашняя работа к уроку 5 (ООП) 1. Описать класс Cat (кошка), который будет хранить 5 параметров: имя, возраст, вес, рост и длина хвоста. Класс также должен содержать метод «Мяу», выводящий информацию о кошке на консоль. Затем «переделать» класс Cat в структуру и посмотреть, что от этого изменится. 1. В классе Cat описать два конструктора: один с параметрами, другой без параметров. Конструктор с параметрами должен инициализировать ВСЕ поля, которые содержатся в классе Cat. Также требуется создать два свойства: одно содержит только аксессор (метод) get, второе – автоматическое, отражающее вес кота (соответствующее поле при этом удалить). Свойствами воспользоваться в методе «Мяу». Проверить функциональность новых элементов в методе Start. 1. В скрипте PlayerInventory реализовать паттерн (шаблон) Singleton. Убрать из PlayerInvenroty метод OnTriggerEnter2D(…) и сделать начисление монеток путем обращения к Instance этого класса. Сбор монет реализовать в скрипте Player. 1. Создать абстрактный класс Vehicle (транспортное средство) и три его наследника: автобус, автомобиль и трактор. В Vehicle реализовать два члена – поле «имя» и АБСТРАКТНЫЙ метод Beep(), создающий некоторый звук (с помощью Debug.Log). Последний у наследников переопределить и описать любое понравившееся вам тело этого метода. Переделать этот метод в виртуальный, определив базовый функционал, к которому нужно обратиться из методов наследников с помощью оператора base. 1. Переделать во всех скриптах публичные поля на приватные с возможностью доступа к ним из инспектора Unity. Для взаимодействия с этими переменными из других классов определить для них свойства с заданными ограничениями на допустимые для присвоения параметры. "Порядок выполнения методов в Unity":https://docs.unity3d.com/ru/current/Manual/ExecutionOrder.html "Принцип KISS":https://web-creator.ru/articles/kiss "Наследование":https://metanit.com/sharp/tutorial/3.7.php "Полиморфизм":https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/polymorphism "Инкапсуляция":https://metanit.com/sharp/tutorial/3.4.php ## Домашняя работа к уроку 6 (Системы стрельбы) 1. Добавить перезарядку персонажа, используя сопрограммы. Примерный вариант алгоритма: перед выстрелом осуществляется проверка некоторой булевой переменной, которая отображает, готов ли игрок к выстрелу.При удачном выстреле запускается корутина, которая отсчитывает время перезарядки, установленное из инспектора, при это изменяя значение вышеописанной булевой переменной. 1. Добавить анимацию стрельбы (иллюстрации взять из материалов урока). Переход в анимацию стрельбы возможен, если персонаж не падает и не прыгает в данный момент. Выпуск стрелы сделать анимационным событием, которое рассмотрено в первых частях урока. ## Домашняя работа к уроку 7 (Производительность и оптимизация) 1. Переделать скрипт CollisionDamage на новую оптимизированную архитектуру получения компонентов с GameManager в главной роли. 1. Добавить графическое оформление ко всем своим уровням. Сделать несколько разных по спрайтам префабов платформ и заменить «квадрат» аптечки на соответствующую анимацию. Графику для игры скачивайте отсюда. 1. Сделать анимацию получения урона для персонажа и встроить ее в аниматор-контоллер. Помимо этого добавить два декоративных препятствия, которые наносят урон герою: ядовитый мох и разбитые кристаллы. ## Домашняя работа к уроку 8 (Производительность и оптимизация) 1. Создать меню, которое открывается по нажатию кнопки «Пауза». Меню может быть представлено в виде небольшой или полноэкранной панели с кнопками «Продолжить игру», «Звук», «Выйти в меню» и «Выйти из игры». Кнопка «Звук» не должна работать, однако она должна сохранять свое значение в PlayerPrefs (возможно, хорошим выбором в этом случае будет использование Int, где 0 – это false, а 1 – это true). В зависимости от своего состояния кнопка «Звук» должна изменять либо надпись, либо само изображение. 2. Дополнительное ДЗ. Если у вас в проекте уже существует несколько уровней, сделать в основном меню кнопку «Уровни», при нажатии на которую открывается панель с упорядоченным набором кнопок. Нажатие на кнопку ведет на соответствующий уровень. ## Домашняя работа к уроку 9 (Система инвентаря) 1. Добавить по выбранному шаблону обработку баффов на игрока. Изменить название TestMethod на более соответствующее имя. Добавить игроку три новых поля (возможно в разных скриптах): forceBonus, armorBonus и damageBonus. 1. В методе обработки баффов, изменять значения forceBonus, armorBonus и damageBonus в зависимости от баффов, накладываемых на игрока. В момент использования текущих переменных force, damage и health накладывать на них повышающие или понижающие коэффициенты, которые хранятся в BuffReciever. 1. Доработать InventoryUIController с помощью Action таким образом, чтобы при нажатии на ячейку происходило обновление всего инвентаря. Ссылки, упоминаемые в уроке: [Custom Editors](https://docs.unity3d.com/Manual/editor-CustomEditors.html) , [ScriptableObject](https://docs.unity3d.com/Manual/class-ScriptableObject.html)