Как спроектировать и закодировать полосу здоровья в Unity3D
Если в вашей игре есть бой, вероятно, вам нужно заняться здоровьем. С Unity3D вы можете сделать это стильно.
Здоровье, впервые появившееся в некоторых из самых ранних видеоигр в мире, является общей механикой, которая присутствует во многих самых популярных играх сегодняшнего дня. Здоровье позволяет использовать сложную механику боя, создавать прогресс игрока и делать игру более интуитивно понятной. Но как добавить систему здоровья в свои игры?
Unity3D упрощает добавление 2D-элементов пользовательского интерфейса в 3D-игры, поэтому это отличное место для того, чтобы впервые начать изучать полоски здоровья.
Чему вы научитесь
На первый взгляд этот проект может показаться не сложным. Несмотря на это, вам необходимо понять несколько ключевых концепций кодирования Unity3D, чтобы создать работающую полосу работоспособности. Это означает, что вам предстоит многому научиться в ходе реализации этого проекта, в том числе:
- Как создавать 2D-элементы/спрайты пользовательского интерфейса в Unity3D.
- Как редактировать компоненты игровых объектов с помощью кода.
- Как обмениваться переменными между скриптами в Unity3D.
Шаг 1: Настройте сцену
Прежде чем вы сможете начать кодировать свою полосу здоровья, вам нужна сцена с моделью игрока, к которой она будет применяться. Для начала вы можете воспользоваться нашим руководством по контроллеру персонажей Unity3D, основанным на физике, и создать модель игрока с базовыми элементами управления.
Когда модель сцены и игрока готова, пришло время добавить элемент пользовательского интерфейса. Щелкните правой кнопкой мыши внутри окна иерархии и выберите UI > Изображение. Это создаст два новых элемента в вашей иерархии: родительский объект Canvas и дочерний объект Image. Измените имя дочернего объекта на Healthbar. Выберите ширину, высоту и положение шкалы здоровья с помощью инспектора.
Вы можете добавить немного большее изображение пользовательского интерфейса с черным цветом, чтобы оно служило фоном/рамкой для панели здоровья. Просто убедитесь, что он находится над полосой здоровья в иерархии, чтобы он отображался позади нее.
Этот элемент пользовательского интерфейса служит основой для вашей шкалы здоровья, но вам также понадобится спрайт для его анимации. Перейдите на панель «Проект», щелкните правой кнопкой мыши и выберите Создать > 2D > Спрайты > Квадрат.
Выберите панель здоровья из иерархии и перетащите только что созданный спрайт в поле выбора исходного изображения внутри инспектора. Вы также можете изменить Тип изображения на Заливка, Метод заливки на Горизонтальное и Начало заливки на Левое. Теперь, если вы запустите игру и воспользуетесь ползунком Объем заполнения, вы увидите, как полоска вашего здоровья уменьшается и увеличивается.
Если вы не видите меню компонентов пользовательского интерфейса, перейдите в Окно > Диспетчер пакетов и убедитесь, что у вас установлен пакет 2D.
Шаг 2. Добавьте переменную работоспособности
Не было бы особого смысла создавать полосу здоровья без переменной здоровья, определяющей ее состояние. Другие сценарии должны иметь доступ к этой переменной, и имеет смысл поместить ее где-нибудь в центре. Добавьте его в скрипт управления персонажем как общедоступное плавающее число:
public float playerHealth = 1.0f;
Использование числа с плавающей запятой для этой переменной означает, что вы можете легко представить любой процент от 0 до 100, чтобы соответствовать переменной «Объем заполнения» изображения панели состояния пользовательского интерфейса. Например, значение playerHealth, равное 0,5f, составляет 50 % ширины полосы здоровья.
Шаг 3. Совместное использование переменных между скриптами в Unity
Переменные обычно работают внутри своих собственных функций и сценариев. Это делает их недоступными из других функций и скриптов, если вы не предпримете шаги, чтобы сообщить коду, где найти переменные, с которыми вы хотите работать.
Начните с создания нового файла сценария под названием Health, в котором будет храниться код. Вы можете перетащить этот сценарий на элемент пользовательского интерфейса Healthbar, созданный на первом этапе. Следующий код используется в функции void Update().
Этот процесс начинается с поиска игрового объекта, которому принадлежит переменная. В данном случае это объект Character_Model:
GameObject Character_Model = GameObject.Find("Character_Model");
Далее пришло время найти компонент скрипта, содержащий переменную, с которой вам нужно работать.
Character_Control character_Control = Character_Model.GetComponent();
И, наконец, вы можете извлечь конкретную переменную, которую ищете. В данном случае это переменная playerHealth, которую вы добавили в контроллер персонажа. Присвойте это переменной с плавающей запятой в текущем скрипте под названием currentHealth.
currentHealth = character_Control.playerHealth;
Чтобы получить нужную вам переменную, потребуется всего несколько строк кода, и вы можете применять этот метод всякий раз, когда вам нужно получить доступ к состоянию здоровья вашего игрока. Когда вы закончите, ваш код должен выглядеть так:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Health : MonoBehaviour
{
public float currentHealth;
void Start()
{
}
void Update()
{
GameObject Character_Model = GameObject.Find("Character_Model");
Character_Control character_Control = Character_Model.GetComponent();
currentHealth = character_Control.playerHealth;
}
}
Шаг 4. Запрограммируйте игровой объект «Панель здоровья пользовательского интерфейса»
Теперь, когда вы создали элемент пользовательского интерфейса панели здоровья и получили доступ к переменной здоровья игрока, пришло время заставить их работать вместе. Для начала добавьте частную статическую переменную, которая будет содержать компонент изображения вашей панели здоровья:
private static Image Healthbar;
Затем вы можете присвоить компонент изображения этой переменной в функции void Start(), которая запускается только один раз.
Healthbar = GetComponent();
Теперь, когда у вас есть все переменные, вы можете использовать код из предыдущего шага, чтобы установить ширину заполнения объекта пользовательского интерфейса панели работоспособности. Здесь не нужно выполнять какое-либо преобразование; И здоровье игрока, и количество заполнения шкалы здоровья являются плавающими переменными.
Healthbar.fillAmount = currentHealth;
При наличии этого кода ваша полоса здоровья будет заполняться вверх и вниз в зависимости от переменной здоровья, найденной в коде Character_Control. Однако это немного скучно, и определенно можно было бы добавить немного цвета.
Начните с добавления нового цвета, чтобы полоска здоровья стала светло-зеленой, когда у игрока много здоровья.
Color greenHealth = new Color(0.6f, 1, 0.6f, 1);
Затем добавьте оператор if, чтобы проверить, превышает ли здоровье игрока 0,3f, т. е. 30% или более. Если оно выше 0,3f, установите полосу здоровья в соответствии с только что добавленным цветом. Если оно ниже 0,3f, сделайте полоску здоровья красной.
if (currentHealth >= 0.3f) {
Healthbar.color = greenHealth;
} else {
Healthbar.color = Color.red;
}
Шаг 5. Тестирование кода
Как вы можете видеть из полного кода ниже, этот проект довольно прост, когда все собрано вместе. Конечно, вам нужен способ протестировать ваш код.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Health : MonoBehaviour
{
private static Image Healthbar;
public float currentHealth;
void Start()
{
Healthbar = GetComponent();
}
void Update()
{
GameObject Character_Model = GameObject.Find("Character_Model");
Character_Control character_Control = Character_Model.GetComponent();
currentHealth = character_Control.playerHealth;
Healthbar.fillAmount = currentHealth;
Color greenHealth = new Color(0.6f, 1, 0.6f, 1);
if (currentHealth >= 0.3f) {
Healthbar.color = greenHealth;
} else {
Healthbar.color = Color.red;
}
}
}
Вы можете добавить одну строку кода в сценарий Character_Control, чтобы сделать тестирование возможным. Каждый раз, когда игрок нажимает клавишу W, чтобы двигаться вперед, он удаляет небольшое количество здоровья. Вы можете добавить тот же код в любой скрипт с доступом к переменной playerHealth для получения тех же результатов:
playerHealth -= 0.001f;
Вы также можете рассмотреть возможность добавления уникальных ресурсов в свой проект Unity. Вы можете найти бесплатные ресурсы Unity в Интернете, что даст вам возможность оживить свой проект, не тратя денег.
Создание полос здоровья в Unity3D
Ваша игра начинает обретать форму теперь, когда у вашего персонажа есть шкала здоровья. Предстоит еще много работы, но теперь у вас должны быть некоторые ключевые навыки, необходимые для того, чтобы начать добиваться реального прогресса. Конечно, никогда не помешает прочитать больше руководств.