Вы сейчас тут: Главная » Каталог статей » Обучающие статьи
Графический бар здоровья
Категория: Обучающие статьи | Просмотров: 888 | Добавил: Badman
Он показывает нам отображение изображений для чисел с плавающей точкой. Например, отображать количество здоровья, зеленый (много здоровья), красный (мало здоровья). Значения могут быть представлены в виде чисел с плавающей точкой (например, 0,0 - 1,0) или в виде диапазонов в пределах больших чисел (например, 0 - 50), общее решение заключается в выявлении суб-диапазона числового значения и отображать соответствующее изображение.



}Скачать изображения для урока{

Для отображения изображений, соответствующим десятичным числам, выполните следующие действия:
Прикрепите следующий C# скрипт к Main camera:

using UnityEngine;
using System.Collections;
public class HealthBar : MonoBehaviour {

const int MAX_HEALTH = 100;
public Texture2D bar00;
public Texture2D bar10;
public Texture2D bar20;
public Texture2D bar30;
public Texture2D bar40;
public Texture2D bar50;
public Texture2D bar60;
public Texture2D bar70;
public Texture2D bar80;
public Texture2D bar90;
public Texture2D bar100;
private int healthPoints = MAX_HEALTH;

void OnGUI() {
GUILayout.Label("health = " + healthPoints);
float normalisedHealth = (float)healthPoints / MAX_HEALTH;
GUILayout.Label( HealthBarImage(normalisedHealth) );
bool decButtonClicked = GUILayout.Button("decrease power");
bool incButtonClicked = GUILayout.Button("increase power");
if( decButtonClicked )
healthPoints -= 5;
if( incButtonClicked )
healthPoints += 5;
}

private Texture2D HealthBarImage(float health) {
if( health > 0.9 ){ return bar100; }
else if( health > 0.8 ){ return bar90; }
else if( health > 0.7 ){ return bar80; }
else if( health > 0.6 ){ return bar70; }
else if( health > 0.5 ){ return bar60; }
else if( health > 0.4 ){ return bar50; }
else if( health > 0.3 ){ return bar40; }
else if( health > 0.2 ){ return bar30; }
else if( health > 0.1 ){ return bar20; }
else if( health > 0 ){ return bar10; }
else{ return bar00; }
}
}


Выберите Main Camera и в окне Inspector в нужные переменные перенесите изображения
Приватная целочисленная переменная healthPoints хранит игровой параметр для отображения количества здоровья. Константа MAX_HEALTH определяет значение healthPoints, которая указывает полное здоровье. 11 публичных переменных хранят изображения различных версий бара здоровья, для соответствия различным диапазонам здоровья. Например, bar00 соответствует нулевому количеству оставшегося здоровья, и он будет отображать изображение с предупреждением в красной окраске.

Основная функция в этом рецепте это метод, который возвращает объект текстуры изображения, соответствующий текущему значению healthPoints. Создается переменная normalisedHealth (которая всегда будет в диапазоне от 0,0 до 1,0) путем деления healthPoints на MAX_HEALTH. Эта float переменная передается в метод HealthBarImage(), который возвращает изображение. Изображение отображается с помощью вызова метода Label().

Метод HealthBarImage() использует последовательность операторов if, чтобы решить какое изображение вернуть. Указанное значение health испытывается в этой последовательности - 0,9 тестируется первой, затем 0,8, и так далее. Если значение normalisedHealth от 0,9 до 1,0, то будет отображаться изображение в переменной bar100.

Код с массивом текстур
Хотя наличие большого количества публичных переменных типа Texture2D является простым для создания кода, но чище код может быть достигнут с помощью одного массива объектов Texture2D (в окне Inspector вам нужно будет установить размер массива на 11):

public Texture2D[] barImageArray;

Теперь в методе HealthBarImage() нам нужно, что бы оператор if возвращал значение массива:

if( health > 0.9 ){ return barImageArray[10]; }

Теги: Healt Bar
Комментарии пользователей
Количество комментариев к материалу: 0
Добавлять комментарии могут только зарегистрированные пользователи.
Регистрация   Вход
Авторизация
Форма входа на сайт
Чат
Удобное общение
200
Категории раздела
Категории материалов
Голосование
Опрос пользователей
Какую версию Unity3D вы используете?
Всего ответов: 124
Результаты
Статистика
Сатистика на сайте

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Все материалы опубликованные на сайте представлены исключительно для ознакомительного просьмота. Любое ваше несанкционированное использование "ассетов" в ваших коммерческих проектах карается уголовной ответственностью.
Хостинг от uCoz