IMGUI Управление
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, Кнопки вернутся истинно Чтобы выполнить какой-то код при нажатии на Кнопку, вы обворачиваете GUI.Button функции в если заявление. внутри если statement — это код, который будет выполнен при нажатии кнопки Button.
/* 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 вернется истинно для каждого кадра, на который они нажаты. Чтобы выполнить какой-то код во время нажатия кнопки, вы обворачиваете GUI.RepeatButton функции в если заявление. внутри если заявление является кодом, который будет выполняться в то время как 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. Когда строка изменяется, функция 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
Элемент управления Переключить создаёт флажок с сохраняемым состоянием включения или отключения. Пользователь может изменить состояние, щёлкнув флажок.
Основное использование
Состояние переключателя «вкл./выкл.» представлено логическим значением true/false. Вы должны передать логическое значение в качестве параметра, чтобы переключатель отражал фактическое состояние. При нажатии функция 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
Элемент управления Панель инструментов по сути представляет собой строку кнопок. Одновременно может быть активна только одна кнопка Toolbar; она остаётся активной, пока не будет нажата другая. Такое поведение имитирует работу обычной Toolbar. На Toolbar можно создать произвольное число кнопок.
Основное использование
Активная Кнопка в Панели инструментов отслеживается через целое число. Вы должны предоставить целое число в качестве аргумента в функции. Чтобы сделать Панель инструментов интерактивной, вы должны назначить целое число возвращаемому значению функции. Количество элементов в массиве содержимого, который вы предоставляете, будет определять количество Кнопок, которые будут показаны в Панели инструментов.
/* 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 представляет собой типичное горизонтальное скользящее колесо, которое можно перетаскивать для изменения значения между заранее определенными значениями мин и макс.
Основное использование
Положение кнопки Slider сохраняется в виде числа с плавающей запятой. Чтобы отобразить положение кнопки, вы предоставляете это число с плавающей запятой в качестве одного из аргументов функции. Есть два дополнительных значения, которые определяют минимальное и максимальное значения. Если вы хотите, чтобы кнопка Slider была регулируемой, назначьте значение слайдера float как возвращаемое значение функции Slider.
/* 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 представляет собой типичное вертикальное скользящее колесо, которое можно перетаскивать для изменения значения между заранее определенными значениями мин и макс.
Основное использование
Положение кнопки Slider сохраняется в виде числа с плавающей запятой. Чтобы отобразить положение кнопки, вы предоставляете это число с плавающей запятой в качестве одного из аргументов функции. Есть два дополнительных значения, которые определяют минимальное и максимальное значения. Если вы хотите, чтобы кнопка Slider была регулируемой, назначьте значение слайдера float как возвращаемое значение функции Slider.
/* 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 похоже на Слайдер, но визуально похоже на Scrolling элементы для веб-браузеров или текстовых редакторов. Это управление используется для навигации по 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 похоже на Управление Слайдер, но визуально похоже на элементы прокрутки для веб-браузеров или текстовых редакторов. Это управление используется для навигации по Управлению 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, — это элементы управления, которые отображают видимую область гораздо большего набора элементов управления.
Основное использование
ScrollViews требует двух Rects в качестве аргументов. Первый Прямая определяет расположение и размер отображаемой ScrollView области на экране. Второй Прямая определяет размер пространства, содержащегося внутри отображаемой области. Если пространство внутри отображаемой области больше, чем отображаемая область, то будут появляться соответствующие панели прокрутки. Вы также должны назначить и предоставить вектор 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 являются перетаскиваемыми контейнерами Управлений. Они могут получать и терять фокус при нажатии. Из-за этого они реализованы немного иначе, чем другие Управления. Каждое Окно имеет Идентификатор номер, и его содержимое объявляется внутри отдельной функции, которая вызывается, когда Окно имеет фокус.
Основное использование
Windows являются единственными Управляющими, которые требуют дополнительной функции для надлежащей работы. Вы должны предоставить Идентификатор номер и имя функции, которая будет выполняться для Окна. В функции Окна вы создаете свои фактические поведения или содержащиеся Управляющие.
/* 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 (нажал кнопку, перетащил ползунок и т.д.), прочитайте значение 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 Управляющий был помещен до того, как с ним манипулировал пользователь.