Здравствуйте! Сегодня мы создадим монетки, которые при подборе будут увеличивать счет игрока.
Пикапы
Монеты будут подбираемыми объектами (пикапами). Для создания пикапов будем использовать отдельный класс Pickup; он при контакте с другими объектами будет издавать сигнал с помощью события (event).
Монеты
Создадим для монет отдельный класс Coin, который будет требовать, чтобы на объекте также висел класс Pickup.
Почему агрегация, а не наследование класса Coin от Pickup?
Из того, что я знаю и видел, у меня сложилось мнение, что лучше использовать агрегацию, а не наследование.
Теперь, для обработки коллизии создадим в классе Coin метод OnPickupEntered, который будет это делать. В первую очередь надо понять, что монета столкнулась с игроком. Для этого создадим пока пустой класс Player и повесим его на игрока.
Теперь для проверки, с чем столкнулась монета, достаточно потребовать компонент Player у объекта, с которым произошла коллизия.
Далее добавляем свою логику взаимодействия. В моем случае я решил, что при подборе монетки счет игрока должен увеличиться, а монетка самоуничтожиться.
Осталось лишь подписаться на событие пикапа:
Счет игрока и его отображение
Модель (Model)
В классе Player добавим метод AddCoin и поле _coins:
Отображение (View)
Для отображения будем использовать технологию UI Toolkit, в частности его визуальный элемент Label.
Описать действия для создания простенького UI я не смогу лучше, чем в этой статье (к тому же я его использую в первый раз), потому лишь покажу класс стиля, который у меня получился.
Если вы изучали html+css, то изучение этой технологии будет для вас быстрым.
Отображение-Модель (View-Model)
Для взаимодействия модели и отображения будем использовать третий класс ScoreVisualizer.
Для начала добавим событие ScoreUpdated к Player, которое будет вызываться после подбирания монеты.
В классе ScoreVisualizer подписываемся на это событие.
Осталось получить ссылку на label в UI.
_labelName - название элемента в UI документе, в моем случае он называется Score.
MVVM (Model View View-Model)
В этой статье я продемонстрировал паттерн программирование MVVM, который заключается в том, чтобы отделить модель (логику) от отображения (View) путем добавления третьего класса View-Model, который связывает их.
Результат
Как видно на скриншоте, после подбора двух монет счет игрока стал равен 2-м.
Заключение
В этой статье мы добавили в игру механику пикапов и отображения счета с помощью паттерна MVVM.