Найти в Дзене
NoT ZaTroTing

Idle игра на Unity #3 - Пикапы и отображение счета

Оглавление

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

Пикапы

Монеты будут подбираемыми объектами (пикапами). Для создания пикапов будем использовать отдельный класс Pickup; он при контакте с другими объектами будет издавать сигнал с помощью события (event).

Класс Pickup
Класс Pickup

Монеты

Создадим для монет отдельный класс Coin, который будет требовать, чтобы на объекте также висел класс Pickup.

Почему агрегация, а не наследование класса Coin от Pickup?

Из того, что я знаю и видел, у меня сложилось мнение, что лучше использовать агрегацию, а не наследование.

Теперь, для обработки коллизии создадим в классе Coin метод OnPickupEntered, который будет это делать. В первую очередь надо понять, что монета столкнулась с игроком. Для этого создадим пока пустой класс Player и повесим его на игрока.

Теперь для проверки, с чем столкнулась монета, достаточно потребовать компонент Player у объекта, с которым произошла коллизия.

Проверка на соприкосновение с игроком
Проверка на соприкосновение с игроком

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

Полный метод взаимодействия монеты как пикапа
Полный метод взаимодействия монеты как пикапа

Осталось лишь подписаться на событие пикапа:

Подписка и отписка события в Unity
Подписка и отписка события в Unity

Счет игрока и его отображение

Модель (Model)

В классе Player добавим метод AddCoin и поле _coins:

Монеты игрока
Монеты игрока

Отображение (View)

Для отображения будем использовать технологию UI Toolkit, в частности его визуальный элемент Label.

Описать действия для создания простенького UI я не смогу лучше, чем в этой статье (к тому же я его использую в первый раз), потому лишь покажу класс стиля, который у меня получился.

-6

Если вы изучали html+css, то изучение этой технологии будет для вас быстрым.

Отображение-Модель (View-Model)

Для взаимодействия модели и отображения будем использовать третий класс ScoreVisualizer.

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

-7

В классе ScoreVisualizer подписываемся на это событие.

Отображение счета
Отображение счета

Осталось получить ссылку на label в UI.

-9

_labelName - название элемента в UI документе, в моем случае он называется Score.

Весь класс ScoreVisualizer
Весь класс ScoreVisualizer

MVVM (Model View View-Model)

В этой статье я продемонстрировал паттерн программирование MVVM, который заключается в том, чтобы отделить модель (логику) от отображения (View) путем добавления третьего класса View-Model, который связывает их.

Результат

Как видно на скриншоте, после подбора двух монет счет игрока стал равен 2-м.

-11

Заключение

В этой статье мы добавили в игру механику пикапов и отображения счета с помощью паттерна MVVM.