Типы элементов управления IMGUI
Существует ряд различных элементов управления IMGUI, которые можно создать. В этом разделе перечислены все доступные экранные и интерактивные элементы управления. Существуют и другие функции IMGUI, влияющие на макет элементов управления, которые описаны в разделе Макет Руководства.
Label
Ярлык не интерактивен. Это только для отображения. Его нельзя щелкнуть или иным образом переместить. Лучше всего отображать только информацию.
/* GUI.Label example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
void OnGUI ()
{
GUI.Label (new Rect (25, 25, 100, 30), "Label");
}
}
Button
Кнопка – это обычная интерактивная кнопка. Он будет реагировать один раз при нажатии, независимо от того, как долго мышь остается нажатой. Ответ происходит, как только кнопка мыши будет отпущена.
Основное использование
В UnityGUI кнопки возвращают значение true при нажатии на них. Чтобы выполнить некоторый код при нажатии кнопки, вы заключаете функцию GUI.Button в оператор if. Внутри оператора if находится код, который будет выполняться при нажатии кнопки.
/* GUI.Button example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
void OnGUI ()
{
if (GUI.Button (new Rect (25, 25, 100, 30), "Button"))
{
// This code is executed when the Button is clicked
}
}
}
RepeatButton
RepeatButton – это вариант обычной кнопки. Разница в том, что RepeatButton будет реагировать каждый кадр, пока кнопка мыши остается нажатой. Это позволяет создавать функции «нажми и удерживай».
Основное использование
В UnityGUI RepeatButtons будет возвращать значение true для каждого кадра, в котором они были нажаты. Чтобы выполнить некоторый код во время нажатия кнопки, вы заключаете функцию GUI.RepeatButton в оператор if. Внутри оператора if находится код, который будет выполняться, пока кнопка RepeatButton остается нажатой.
/* GUI.RepeatButton example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
void OnGUI ()
{
if (GUI.RepeatButton (new Rect (25, 25, 100, 30), "RepeatButton"))
{
// This code is executed every frame that the RepeatButton remains clicked
}
}
}
TextField
Элемент управления TextField представляет собой интерактивное редактируемое однострочное поле, содержащее текстовую строку.
Основное использование
В текстовом поле всегда будет отображаться строка. Вы должны указать строку, которая будет отображаться в TextField. Когда в строку вносятся изменения, функция TextField возвращает отредактированную строку.
/* GUI.TextField example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private string textFieldString = "text field";
void OnGUI ()
{
textFieldString = GUI.TextField (new Rect (25, 25, 100, 30), textFieldString);
}
}
TextArea
Элемент управления TextArea представляет собой интерактивную редактируемую многострочную область, содержащую текстовую строку.
Основное использование
Область TextArea всегда будет отображать строку. Вы должны указать строку, которая будет отображаться в TextArea. Когда в строку вносятся изменения, функция TextArea возвращает отредактированную строку.
/* GUI.TextArea example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private string textAreaString = "text area";
void OnGUI ()
{
textAreaString = GUI.TextArea (new Rect (25, 25, 100, 30), textAreaString);
}
}
Toggle
Флажок Toggleпозволяет пользователю включать или выключать параметр. Подробнее
См. в Словарь Элемент управления создает флажок с постоянным включенным/выключенным состоянием. Пользователь может изменить состояние, щелкнув по нему.
Основное использование
Состояние включения/выключения Toggle представлено логическим значением true/false. Вы должны указать логическое значение в качестве параметра, чтобы Toggle представлял фактическое состояние. Функция Toggle вернет новое логическое значение, если по ней щелкнуть. Чтобы зафиксировать эту интерактивность, вы должны назначить логическое значение для принятия возвращаемого значения функции Toggle.
/* GUI.Toggle example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private bool toggleBool = true;
void OnGUI ()
{
toggleBool = GUI.Toggle (new Rect (25, 25, 100, 30), toggleBool, "Toggle");
}
}
Toolbar
Панель инструментовРяд кнопок и основных элементов управления в верхней части редактора Unity, позволяющий взаимодействовать с редактором. различными способами (например, масштабирование, перевод). Подробнее
См. в Словарь Элемент управления представляет собой ряд кнопок. Одновременно может быть активна только одна из кнопок на панели инструментов, и она будет оставаться активной до тех пор, пока не будет нажата другая кнопка. Это поведение эмулирует поведение типичной панели инструментов. Вы можете определить произвольное количество кнопок на панели инструментов.
Основное использование
Активная кнопка на панели инструментов отслеживается через целое число. Вы должны указать целое число в качестве аргумента функции. Чтобы сделать панель инструментов интерактивной, необходимо присвоить возвращаемому значению функции целое число. Количество элементов в предоставленном вами массиве содержимого будет определять количество кнопок, отображаемых на панели инструментов.
/* GUI.Toolbar example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private int toolbarInt = 0;
private string[] toolbarStrings = {"Toolbar1", "Toolbar2", "Toolbar3"};
void OnGUI ()
{
toolbarInt = GUI.Toolbar (new Rect (25, 25, 250, 30), toolbarInt, toolbarStrings);
}
}
SelectionGrid
Элемент управления SelectionGrid представляет собой многострочную панель инструментов. Вы можете определить количество столбцов и строк в сетке. Одновременно может быть активна только одна кнопка.
Основное использование
Активная кнопка в SelectionGrid отслеживается через целое число. Вы должны указать целое число в качестве аргумента функции. Чтобы сделать SelectionGrid интерактивным, вы должны присвоить целое число возвращаемому значению функции. Количество элементов в предоставленном вами массиве контента будет определять количество кнопок, отображаемых в SelectionGrid. Вы также можете указать количество столбцов через аргументы функции.
/* GUI.SelectionGrid example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private int selectionGridInt = 0;
private string[] selectionStrings = {"Grid 1", "Grid 2", "Grid 3", "Grid 4"};
void OnGUI ()
{
selectionGridInt = GUI.SelectionGrid (new Rect (25, 25, 300, 60), selectionGridInt, selectionStrings, 2);
}
}
HorizontalSlider
Элемент управления HorizontalSlider представляет собой типичный горизонтальный ползунковый регулятор, который можно перетаскивать для изменения значения между предопределенными минимальным и максимальным значениями.
Основное использование
Положение ползунка сохраняется как число с плавающей запятой. Чтобы отобразить положение ручки, вы предоставляете это число с плавающей запятой в качестве одного из аргументов функции. Есть два дополнительных значения, которые определяют минимальное и максимальное значения. Если вы хотите, чтобы ручка ползунка была регулируемой, назначьте плавающее значение ползунка в качестве возвращаемого значения функции ползунка.
/* Horizontal Slider example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private float hSliderValue = 0.0f;
void OnGUI ()
{
hSliderValue = GUI.HorizontalSlider (new Rect (25, 25, 100, 30), hSliderValue, 0.0f, 10.0f);
}
}
VerticalSlider
Элемент управления VerticalSlider представляет собой типичный вертикальный ползунковый регулятор, который можно перетаскивать для изменения значения между предопределенными минимальным и максимальным значениями.
Основное использование
Положение ползунка сохраняется как число с плавающей запятой. Чтобы отобразить положение ручки, вы предоставляете это число с плавающей запятой в качестве одного из аргументов функции. Есть два дополнительных значения, которые определяют минимальное и максимальное значения. Если вы хотите, чтобы ручка ползунка была регулируемой, назначьте плавающее значение ползунка в качестве возвращаемого значения функции ползунка.
/* Vertical Slider example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private float vSliderValue = 0.0f;
void OnGUI ()
{
vSliderValue = GUI.VerticalSlider (new Rect (25, 25, 100, 30), vSliderValue, 10.0f, 0.0f);
}
}
HorizontalScrollbar
Элемент управления HorizontalScrollbar похож на элемент управления Slider, но визуально похож на элементы прокрутки для веб-браузеров или текстовых процессоров. Этот элемент управления используется для навигации по элементу управления ScrollView.
Основное использование
Горизонтальные полосы прокрутки реализованы так же, как и горизонтальные ползунки, за одним исключением: существует дополнительный аргумент, который управляет шириной самой ручки полосы прокрутки.
/* Horizontal Scrollbar example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private float hScrollbarValue;
void OnGUI ()
{
hScrollbarValue = GUI.HorizontalScrollbar (new Rect (25, 25, 100, 30), hScrollbarValue, 1.0f, 0.0f, 10.0f);
}
}
VerticalScrollbar
Элемент управления VerticalScrollbar похож на элемент управления Slider, но визуально похож на элементы прокрутки для веб-браузеров или текстовых процессоров. Этот элемент управления используется для навигации по элементу управления ScrollView.
Основное использование
Вертикальные полосы прокрутки реализованы так же, как и вертикальные ползунки, за одним исключением: существует дополнительный аргумент, который управляет высотой самой ручки полосы прокрутки.
/* Vertical Scrollbar example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private float vScrollbarValue;
void OnGUI ()
{
vScrollbarValue = GUI. VerticalScrollbar (new Rect (25, 25, 100, 30), vScrollbarValue, 1.0f, 10.0f, 0.0f);
}
}
ScrollView
ScrollViews — это элементы управления, отображающие видимую область гораздо большего набора элементов управления.
Основное использование
ScrollView требует двух Rect в качестве аргументов. Первый Rect определяет расположение и размер видимой области ScrollView на экране. Второй Rect определяет размер пространства внутри видимой области. Если пространство внутри видимой области больше, чем видимая область, полосы прокрутки будут отображаться соответствующим образом. Вы также должны назначить и предоставить 2D-вектор, в котором хранится положение отображаемой области просмотра.
/* ScrollView example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private Vector2 scrollViewVector = Vector2.zero;
private string innerText = "I am inside the ScrollView";
void OnGUI ()
{
// Begin the ScrollView
scrollViewVector = GUI.BeginScrollView (new Rect (25, 25, 100, 100), scrollViewVector, new Rect (0, 0, 400, 400));
// Put something inside the ScrollView
innerText = GUI.TextArea (new Rect (0, 0, 400, 400), innerText);
// End the ScrollView
GUI.EndScrollView();
}
}
Window
Windows — это перетаскиваемые контейнеры элементов управления. Они могут получать и терять фокус при нажатии. Из-за этого они реализованы немного иначе, чем другие элементы управления. Каждое окно имеет номер id, а его содержимое объявляется внутри отдельной функции, которая вызывается, когда окно получает фокус.
Основное использование
Windows — единственный элемент управления, для правильной работы которого требуется дополнительная функция. Вы должны предоставить номер id и имя функции, которая будет выполняться для окна. Внутри функции Window вы создаете свое реальное поведение или содержащиеся в нем элементы управления.
/* Window example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private Rect windowRect = new Rect (20, 20, 120, 50);
void OnGUI ()
{
windowRect = GUI.Window (0, windowRect, WindowFunction, "My Window");
}
void WindowFunction (int windowID)
{
// Draw any Controls inside the window here
}
}
GUI.changed
Чтобы определить, выполнял ли пользователь какое-либо действие в графическом интерфейсе (нажал кнопку, перетащил ползунок и т. д.), прочтите значение GUI.changed из сценария. Это значение устанавливается в true, когда пользователь что-то сделал, что упрощает проверку пользовательского ввода.
Обычным сценарием может быть панель инструментов, где вы хотите изменить конкретное значение в зависимости от того, какая кнопка на панели инструментов была нажата. Вы не хотите назначать значение при каждом вызове OnGUI(), только когда была нажата одна из кнопок.
/* GUI.changed example */
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour
{
private int selectedToolbar = 0;
private string[] toolbarStrings = {"One", "Two"};
void OnGUI ()
{
// Determine which button is active, whether it was clicked this frame or not
selectedToolbar = GUI.Toolbar (new Rect (50, 10, Screen.width - 100, 30), selectedToolbar, toolbarStrings);
// If the user clicked a new Toolbar button this frame, we'll process their input
if (GUI.changed)
{
Debug.Log("The toolbar was clicked");
if (0 == selectedToolbar)
{
Debug.Log("First button was clicked");
}
else
{
Debug.Log("Second button was clicked");
}
}
}
}
GUI.changed возвращает значение true, если какой-либо элемент управления GUI, размещенный до того, как он был изменен пользователем.