Получите эти цифры!

Буквально вчера мы подготовили все необходимое для текстового элемента Score. Пришло время реализовать этот функционал с помощью кода!

Партитура - это текстовый элемент. Следовательно, нам просто нужно объявить переменную типа Text.

Возможно, вы заметили, что код не заполнялся автоматически и даже подчеркнут красной волнистой линией. Не беспокойтесь, это нормально.

Если вы похожи на меня и используете Rider в качестве IDE, вам сообщат, в чем проблема. Тип данных Text существует в нескольких директивах, и IDE не уверена, какую из них следует использовать. Поэтому вас спросят, какой из них вы хотите использовать.

Поскольку мы хотим получить доступ к библиотеке Unity, мы выбираем UnityEngine.UI.Text

Если вы используете Visual Studio или другую IDE, которая не уведомляет вас об этом, как здесь, вам просто нужно добавить с помощью UnityEngine.UI; в самом верху вашего скрипта UIManager.cs.

Тогда первые 4 строки должны выглядеть так:

После этого красная волнистая линия должна исчезнуть, и в вашем скрипте не должно быть ошибок!

Создание переменной оценки
Чтобы сохранить оценку, нам сначала нужно создать переменную. Создадим его в скрипте Player:

Доступ к переменной оценки
Никогда
не объявляйте переменную с модификатором доступа public! Правило состоит в том, что каждую новую переменную объявляют как приватную, поэтому лучше его придерживаться.

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

Методы, которые предназначены для доступа к другим сценариям, нуждаются в модификаторе доступа public, чтобы другие сценарии могли видеть этот метод.

Текстовое поле _scoreText хранится в UIManager. Чтобы получить доступ к только что созданному методу GetScore (), нам нужно создать дескриптор Player в скрипте UIManager.cs.

Для начала нам нужно назначить Player:

После этого нам нужно назначить Player:

Теперь у нас есть доступ к публичным методам в скрипте плеера! Поскольку мы хотим получать счет постоянно, мы вызываем метод GetScore () внутри метода Update () для UIManager () сценарий. Однако эта строка кода не будет работать:

Почему? Потому что мы переназначаем GameObject. Мы хотим изменить текст, а не GameObject. Следовательно, нам нужен доступ к текстовому компоненту _scoreText. Следующая строка кода даст нам желаемое поведение:

Добавление очков
Мы знаем, что счет отображается на экране. Однако счет всегда остается на 0…

Чтобы исправить это, нам нужно добавить несколько очков в какой-то момент игры. Кому понравится игра со счетчиком очков, постоянно остающимся на 0? 😄

Давайте добавим новый метод в скрипт Player.cs:

  • public, потому что нам нужен доступ к этому методу из другого скрипта
  • Мы хотим указать количество очков, которое мы хотим добавить. Различные действия могут добавить разное количество очков. Следовательно, мы будем напрямую вводить сумму при каждом вызове метода. Метод вернет ошибку, если вы не укажете точки для добавления.
  • Наконец, мы добавим только что указанную сумму к существующей оценке.

Вызов метода из скрипта Enemy.cs
Теперь пришло время для последнего шага! Мы хотим давать игроку 10 очков каждый раз, когда враг уничтожается лазером. Для этого нам просто нужно добавить одну строку кода в метод OnTriggerEnter2D () объекта Enemy.

Мы просто хотим дать игроку дополнительные очки, если враг столкнулся с лазером. Если враг сталкивается с игроком, мы не получаем никаких очков к текущему счету. Следовательно, мы должны добавить код внутри блока other.CompareTag («Laser»).

Вот и все! Мы успешно добавили в игру систему очков! Взглянем на конечный результат: