Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

В этом разделе объясняется, что необходимо для написания сценариев элементов управления с помощью системы графического интерфейса пользователя Immediate Mode (IMGUI) Unity.

Создание элементов управления с помощью IMGUI

Элементы управления Unity IMGUI используют специальную функцию OnGUI(). Функция OnGUI() вызывается в каждом кадре до тех пор, пока активен содержащий скрипт — точно так же, как функция Update().

Сами элементы управления IMGUI имеют очень простую структуру. Эта структура очевидна в следующем примере.

/* Example level loader */ using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { void OnGUI () { // Make a background box GUI.Box(new Rect(10,10,100,90), "Loader Menu"); // Make the first button. If it is pressed, Application.Loadlevel (1) will be executed if(GUI.Button(new Rect(20,40,80,20), "Level 1")) { Application.LoadLevel(1); } // Make the second button. if(GUI.Button(new Rect(20,70,80,20), "Level 2")) { Application.LoadLevel(2); } } }

Этот пример представляет собой полный загрузчик функционального уровня. Если вы скопируете/вставите этот скрипт и присоедините к нему GameObjectфундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации , камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
, при входе вы увидите следующее меню Режим воспроизведения:

Меню загрузчика, созданное по примеру кода
Меню загрузчика, созданное по примеру кода

Давайте подробно рассмотрим код примера:

Первая строка графического интерфейса, GUI.Box (Rect (10,10,100,90), «Меню загрузчика»); отображает элемент управления Box с текстом заголовка « Меню загрузчика». Он следует типичной схеме объявления элементов управления графического интерфейса, которую мы сейчас рассмотрим.

Следующая строка GUI — это объявление элемента управления Button. Обратите внимание, что это немного отличается от объявления Box Control. В частности, все объявление Button помещается в оператор if. Когда игра запущена и нажата кнопка, этот оператор if возвращает значение true, и выполняется любой код внутри блока if.

Поскольку код OnGUI() вызывается в каждом кадре, вам не нужно явно создавать или уничтожать элементы управления GUI. Строка, объявляющая элемент управления, та же, что и создающая его. Если вам нужно отображать элементы управления в определенное время, вы можете использовать для этого любую логику сценария.

/* Flashing button example */ using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { void OnGUI () { if (Time.time % 2 < 1) { if (GUI.Button (new Rect (10,10,200,20), "Meet the flashing button")) { print ("You clicked me!"); } } } }

Здесь GUI.Button() вызывается только раз в две секунды, поэтому кнопка будет появляться и исчезать. Естественно, пользователь может щелкнуть ее только тогда, когда кнопка видна.

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

Структура элемента управления

При объявлении элемента управления с графическим интерфейсом требуется три ключевых элемента информации:

Тип (Позиция, Содержание)

Обратите внимание, что эта структура является функцией с двумя аргументами. Сейчас мы подробно рассмотрим эту структуру.

Тип

Type – это тип элемента управления, который объявляется путем вызова функции в классе графического интерфейса Unity или класс GUILayout, который подробно обсуждается в разделе Режимы макета Руководства. . Например, GUI.Label() создаст неинтерактивную метку. Все различные типы элементов управления объясняются позже, в разделе Элементы управления Руководства.

Позиция

Позиция — это первый аргумент в любой функции управления GUI. Сам аргумент предоставляется функцией Rect(). Rect() определяет четыре свойства: самая левая позиция, самая верхняя позиция, общая ширина, общая высота. Все эти значения представлены в виде целых чисел, которые соответствуют пикселямнаименьшим единицам компьютерного изображения. . Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
Просмотреть в значениях Словарь
. Все элементы управления UnityGUI работают в экранном пространстве, которое представляет собой разрешение опубликованного проигрывателя в пикселях.

Система координат основана на левом верхнем углу. Rect(10, 20, 300, 100) определяет прямоугольник, который начинается с координат: 10,20 и заканчивается с координатами 310,120. Стоит повторить, что вторая пара значений в Rect() — это общая ширина и высота, а не координаты конца элементов управления. Вот почему приведенный выше пример заканчивается на 310 120, а не на 300 100.

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

/* Screen.width & Screen.height example */ using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { void OnGUI() { GUI.Box (new Rect (0,0,100,50), "Top-left"); GUI.Box (new Rect (Screen.width - 100,0,100,50), "Top-right"); GUI.Box (new Rect (0,Screen.height - 50,100,50), "Bottom-left"); GUI.Box (new Rect (Screen.width - 100,Screen.height - 50,100,50), "Bottom-right"); } }
Ящики, расположенные в приведенном выше примере
Ящики, расположенные в приведенном выше примере

Контент

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

using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { void OnGUI () { GUI.Label (new Rect (0,0,100,50), "This is the text string for a Label Control"); } }

Чтобы отобразить изображение, объявите общедоступную переменную Texture2D и передайте имя переменной в качестве аргумента содержимого следующим образом:

/* Texture2D Content example */ public Texture2D controlTexture; ... void OnGUI () { GUI.Label (new Rect (0,0,100,50), controlTexture); }

Вот пример, более близкий к реальному сценарию:

/* Button Content examples */ using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { public Texture2D icon; void OnGUI () { if (GUI.Button (new Rect (10,10, 100, 50), icon)) { print ("you clicked the icon"); } if (GUI.Button (new Rect (10,70, 100, 20), "This is text")) { print ("you clicked the text button"); } } }
Кнопки, созданные в приведенном выше примере
Кнопки, созданные в приведенном выше примере

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

/* Using GUIContent to display an image and a string */ using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { public Texture2D icon; void OnGUI () { GUI.Box (new Rect (10,10,100,50), new GUIContent("This is text", icon)); } }

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

/* Using GUIContent to display a tooltip */ using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { void OnGUI () { // This line feeds "This is the tooltip" into GUI.tooltip GUI.Button (new Rect (10,10,100,20), new GUIContent ("Click me", "This is the tooltip")); // This line reads and displays the contents of GUI.tooltip GUI.Label (new Rect (10,40,100,20), GUI.tooltip); } }

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

/* Using GUIContent to display an image, a string, and a tooltip */ using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { public Texture2D icon; void OnGUI () { GUI.Button (new Rect (10,10,100,20), new GUIContent ("Click me", icon, "This is the tooltip")); GUI.Label (new Rect (10,40,100,20), GUI.tooltip); } }

На странице справочника скриптов для конструктора GUIContent есть несколько примеров его использования.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3