Сколько ударов я могу выдержать, прежде чем все закончится?

Теперь у нас есть полностью рабочая система оценок. Первая часть пользовательского интерфейса готова! Большой! А теперь займемся второй частью пользовательского интерфейса, игрок жив!

Создание элемента пользовательского интерфейса
Мы начинаем с той же процедуры из текстового поля счета, мы создаем элемент пользовательского интерфейса!

  • Щелкните холст правой кнопкой мыши в иерархии ›UI› Изображение

Вы увидите белый квадрат:
Не волнуйтесь! Это нормально, поскольку мы еще не предоставили Unity никакой информации об изображении. Квадрат - это просто заполнитель.

Переместите его в удобное для вас место! Я положу его в левый верхний угол.

Назначение целевого изображения
Чтобы показать реальный спрайт вместо белого поля, нам просто нужно предоставить исходное изображение для Unity для отображения и отображения. Просто перетащите файл из окна «Проект» в область «Исходное изображение» в Инспекторе. Какой образ вы выберете, не имеет значения.

Исправление странного вида изображения
Возможно, вы заметили, что изображение действительно выглядит странно и сжато. Это потому, что изображение заполняет все пространство GameObject Image. Чтобы исправить это, просто установите флажок «Сохранить аспект» внутри компонента «Изображение» в Инспекторе.

  • Щелкните по life_img ›Обратите внимание на компонент Image в инспекторе› Установите флажок Сохранить аспект

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

Заставить его работать с помощью кода!
После всего этого у нас есть индикатор в нашей игре. Однако изображение статично и не отражает реальных жизней, которые у игрока еще есть. Чтобы исправить это, нам нужно реализовать логику с помощью кода.
Начнем с объявления наших переменных!

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

Вот код того, что вы только что прочитали:

Нам нужна функция для отключения спрайтов, отображающих текущие жизни.

  • Создайте новую общедоступную функцию, которая требует передать обратно переменную, возвращающую текущее количество жизней.
  • Мы хотим обновить спрайт изображения в соответствии с текущими жизнями игрока. Соответствующие спрайты хранятся в только что созданном массиве. Давайте обратимся к его индексу, чтобы показать правильный спрайт!
  • Чтобы уведомить игрока о том, что осталась только одна жизнь, мы можем изменить цвет изображения.

Текущие жизни хранятся в скрипте Player.cs. Поскольку UIManager нуждается в этой информации, мы должны создать дескриптор UIManager внутри сценария Player.

  • Создайте переменную типа UIManager
  • Найдите компонент и получите доступ к скрипту UIManager
  • Не забывайте обнулять!

Помните, что мы создали публичную функцию в скрипте UIManager? У нас есть функция, но она не знает, когда именно она должна обновлять спрайты, представляющие жизни.

  • Вызовите метод _uiManager.UpdateLives () внутри функции Damage игрока и передайте переменную _lives
  • В зависимости от спрайта, который вы выбрали ранее при назначении целевого изображения, мы также должны вызвать эту функцию в void Start (). Это гарантирует, что спрайт обновится до трех жизней в самом начале игры, независимо от выбранного спрайта.
    Если вы этого не делаете и выбрали спрайт «Один» или «Два» в качестве исходного изображения, это произойдет при запуске игры:

Если все это сделано, метод Damage () файла Player.cs будет выглядеть так:

Вот и все! Живая визуализация теперь работает так, как задумано, и игрок знает, сколько ударов корабль еще может выдержать до того, как «Игра окончена!». время!

Следующим будет уведомление о завершении игры. Будьте на связи!