Files
hw-pixelone-course-creating…/Platformer/README.md
2023-06-11 00:35:07 +03:00

67 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Практическая работа
Данный проект будет выполнятся в течении всего курса.
## Домашняя работа к уроку 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)