Он показывает нам отображение изображений для чисел с плавающей точкой. Например, отображать количество здоровья, зеленый (много здоровья), красный (мало здоровья). Значения могут быть представлены в виде чисел с плавающей точкой (например, 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]; }