Здоровье персонажа / Health Bar

Будем делать индикатор здоровья персонажа или как еще говорят, полоска здоровья. В общем, главный приоритет для нас, это удобство использования и настройки. Это улучшенный вариант бара, который мы публиковали ранее. Кроме всего прочего, рассмотрим, как быстро настроить стандартный слайдер, буквально за пару минут, для нашего индикатора. Основные возможности скрипта: установка уровня здоровья, от нуля и до нужного значения; регулировка ширины бара, относительно разрешения экрана; возможность размещать индикатор как слева, так и справа; быстрый доступ к текущему значению и функции изменения значения здоровья, из любого другого скрипта.

Преступим, первым делом добавим слайдер и настроим его, GameObject > UI > Slider:


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

В слайдере удаляем объект Background и выбираем Fill Area, настраиваем как на криншоте:

Здоровье персонажа / Health Bar

Тут же, находим объект Fill и настраиваем так же.

Далее, берем Handle Slide Area и делаем тоже самое, что и с предыдущим объектом. Последний штрих, находим Handle, ставим ширину на единицу, а альфа канал изображения на ноль, в общем как показано ниже:


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

Создаем C# скрипт HealthBar, цепляем его на пустой объект например:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class HealthBar : MonoBehaviour {
	
	public float maxValue = 100;
	public Color color = Color.red;
	public int width = 4;
	public Slider slider;
	public bool isRight;

	private static float current;
	
	void Start()
	{
		slider.fillRect.GetComponent<Image>().color = color;

		slider.maxValue = maxValue;
		slider.minValue = 0;
		current = maxValue;

		UpdateUI();
	}

	public static float currentValue
	{
		get { return current; }  
	}
	
	void Update () 
	{
		if(current < 0) current = 0;
		if(current > maxValue) current = maxValue;
		slider.value = current;
	}
	
	void UpdateUI()
	{
		RectTransform rect = slider.GetComponent<RectTransform>();

		int rectDeltaX = Screen.width/width;
		float rectPosX = 0;

		if(isRight) 
		{
			rectPosX = rect.position.x - (rectDeltaX - rect.sizeDelta.x)/2;
			slider.direction = Slider.Direction.RightToLeft;
		}
		else 
		{
			rectPosX = rect.position.x + (rectDeltaX - rect.sizeDelta.x)/2;
			slider.direction = Slider.Direction.LeftToRight;
		}

		rect.sizeDelta = new Vector2(rectDeltaX, rect.sizeDelta.y);
		rect.position = new Vector3(rectPosX, rect.position.y, rect.position.z);
	}
	
	public static void AdjustCurrentValue(float adjust)
	{
		current += adjust;
	}
}

В переменной slider указываем ранее созданный слайдер здоровья, если индикатор с правой стороны экрана, то обязательно ставим галочку isRight. Ширина width, чем больше значение, там меньше будет размер полоски, так как разрешение экрана по ширине тут, делится на данное значение.

Доступ из других скриптов:

// добавить здоровья
HealthBar.AdjustCurrentValue(10);

// убавить здоровье
HealthBar.AdjustCurrentValue(-10);

// получить текущее значение
Debug.Log("Здоровье персонажа на данный момент:" + HealthBar.currentValue);


Скачать демо проект по теме:

Внимание! Посетители, находящиеся в группе Гости, не могут скачивать файлы.

Комментариев 4

Офлайн
Maox 17 января 2017
Объясните это куда ставить
Доступ из других скриптов:

// добавить здоровья
HealthBar.AdjustCurrentValue(10);

// убавить здоровье
HealthBar.AdjustCurrentValue(-10);

// получить текущее значение
Debug.Log("Здоровье персонажа на данный момент:" + HealthBar.currentValue);
Офлайн
Sershum 17 января 2017
Maox,
Slaider
Офлайн
Sershum 17 января 2017
Sershum,
Паблик херли

ну прости погаричилсо
Офлайн
zerbanius 20 октября 2018
Спасибо за код!
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Дешевый хостинг
  • Яндекс.Метрика