Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity_в_действии_Джозеф_Хокинг_Рус.pdf
Скачиваний:
83
Добавлен:
21.06.2022
Размер:
26.33 Mб
Скачать

140      Глава 6. Двухмерный GUI для трехмерной игры

6.1. Перед тем как писать код…

Чтобы приступить к созданию проекционного дисплея, первым делом нужно понять, как функционирует UI-система. Unity предлагает разные подходы к построению проекционного дисплея, поэтому желательно выбрать наиболее подходящий для наших целей. После чего останется в общих чертах спланировать UI и подготовить необходимые нам графические ресурсы.

6.1.1. IMGUI или усовершенствованный 2D-интерфейс?

Уже в первой версии Unity появилась система GUI непосредственного режима (Immediate Mode GUI, IMGUI), дающая возможность легко поместить на экран интерактивную кнопку. Код такого размещения показан в листинге 6.1; достаточно присоединить этот сценарий к любому объекту сцены. В качестве еще одного примера UI непосредственного режима можно вспомнить курсор прицеливания, который мы создавали в главе 3. В основе такой системы GUI лежит исключительно код, работа в редакторе Unity не требуется.

ОПРЕДЕЛЕНИЕ  Словосочетание «непосредственный режим» (immediate mode) означает явное выполнение команд рисования в каждом кадре, в отличие от режима удержания (retained mode), в котором все визуальные элементы задаются однократно, после чего система сама решает, что именно следует рисовать в каждом кадре.

Листинг 6.1. Реализация кнопки с помощью GUI непосредственного режима

using UnityEngine;

using System.Collections;

public class BasicUI : MonoBehaviour {

void OnGUI() { ¬ Функция вызывается в каждом кадре после того, как все остальное уже визуализировано.

if (GUI.Button(new Rect(10, 10, 40, 20), "Test")) { ¬ Параметры: положение по оси X,

Debug.Log("Test button");

положение по оси Y, ширина, высота,

}

текстовая подпись.

 

}

}

Центральным местом кода этого листинга является метод OnGUI(). Подобно методам Start() и Update(), все представители класса MonoBehaviour автоматически отвечают на метод OnGUI(). Он запускается в каждом кадре после визуализации трехмерной сцены, предоставляя место для команд рисования GUI. В данном случае код рисует кнопку; обратите внимание, что команда рисования кнопки выполняется в каждом кадре (то есть в непосредственном режиме). Эта команда фигурирует внутри условной инструкции, срабатывающей при щелчке на кнопке.

Так как GUI непосредственного режима позволяет с минимальными усилиями получить на экране несколько кнопок, мы будем пользоваться им и в следующих главах (особенно в главе 8). Но это практически единственная вещь, которую данная система генерирует легко, именно поэтому в новейших версиях Unity появилась новая система интерфейса, основанная на компонуемой в редакторе двухмерной графике. Ее настройка требует некоторых усилий, но, скорее всего, в готовых играх вы предпочтете пользоваться именно этой системой, дающей более цельные результаты.

6.1. Перед тем как писать код…      141

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

Для работы с этой системой мы импортируем в редактор изображения и будем перетаскивать объекты в сцену. Теперь осталось подумать, как должен выглядеть наш UI.

6.1.2. Выбор компоновки

В большинстве игр проекционный дисплей состоит из нескольких UI-элементов, повторяющихся снова и снова. Словом, для изучения процесса создания UI вам не потребуется ничего сложного. Мы поместим в углы экрана поверх основного изображения сцены индикатор счета и кнопку настроек, как показано на рис. 6.2. Кнопка будет вызывать всплывающее окно с текстовым полем и ползунком.

И а а

а

О , а

а а.

О а

а

2

И

С †

К а а .

Щ а ƒ а

а „а

К а Close. За а

а

Э -а

. Т

, -

Рис. 6.2. Макет будущего графического интерфейса пользователя

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

Как видите, макет крайне прост! Теперь нужно импортировать необходимые изображения.

6.1.3. Импорт изображений UI

Данный UI требует графики для отображения таких элементов, как, к примеру, кнопки. Мы воспользуемся двухмерными изображениями, как это было в главе 5, поэтому процедура будет вам уже знакома:

1.Импорт изображений (если нужно, определите их как спрайты).

2.Перетаскивание спрайтов в сцену.