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

Настройка элементов управления IMGUI

Хотя система IMGUI в Unity в основном предназначена для создания инструментов разработчика и интерфейсов отладки, вы все равно можете настраивать и стилизовать их разными способами. В системе Unity IMGUI вы можете точно настроить внешний вид своих элементов управления с помощью множества деталей. Внешний вид элементов управления определяется стилями GUIStyles. По умолчанию, когда вы создаете элемент управления без определения GUIStyle, применяется GUIStyle Unity по умолчанию. Этот стиль является внутренним в Unity и может использоваться в опубликованных играх для быстрого прототипирования или если вы решите не стилизовать свои элементы управления.

Если у вас есть большое количество различных стилей GUIStyle для работы, вы можете определить их все в одном оболочке GUISkin. GUISkin — это не более чем набор GUIStyles.

Как стили изменяют внешний вид элементов управления вашего графического интерфейса

GUIStyles имитируют каскадные таблицы стилей (CSS) для веб-браузеров. Было адаптировано множество различных методологий CSS, в том числе дифференциация отдельных свойств состояния для стилей и разделение содержимого и внешнего вида.

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

Два переключателя, оформленные по-разному
Два переключателя, оформленные по-разному

Разница между скинами и стилями

Как указывалось ранее, GUISkins представляют собой набор GUIStyles. Стили определяют внешний вид элемента управления GUI. Вам не обязательно использовать скин, если вы хотите использовать стиль.

Один стиль GUIStyle, отображаемый в Инспекторе
Один стиль GUIStyle, отображаемый в Инспекторе
Один GUISkin, показанный в Инспекторе — обратите внимание, что он содержит несколько стилей GUIStyles.
Один GUISkin, показанный в Инспекторе — обратите внимание, что он содержит несколько стилей GUIStyles.

Работа со стилями

Все функции управления графическим интерфейсом имеют необязательный последний параметр: стиль GUIStyle, используемый для отображения элемента управления. Если это опущено, будет использоваться GUIStyle Unity по умолчанию. Это работает внутренне, применяя имя типа элемента управления в виде строки, поэтому GUI.Button() использует стиль «кнопки», GUI.Toggle() использует « toggle» и т. д. Вы можете переопределить стиль GUIStyle по умолчанию для элемента управления, указав его в качестве последнего параметра.

/* Override the default Control Style with a different style in the UnityGUI default Styles */ // JavaScript function OnGUI () { // Make a label that uses the "box" GUIStyle. GUI.Label (Rect (0,0,200,100), "Hi - I'm a label looking like a box", "box"); // Make a button that uses the "toggle" GUIStyle GUI.Button (Rect (10,140,180,20), "This is a button", "toggle"); } // C# using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { void OnGUI () { // Make a label that uses the "box" GUIStyle. GUI.Label (new Rect (0,0,200,100), "Hi - I'm a label looking like a box", "box"); // Make a button that uses the "toggle" GUIStyle GUI.Button (new Rect (10,140,180,20), "This is a button", "toggle"); } }
Элементы управления, созданные в приведенном выше примере кода
Элементы управления, созданные в приведенном выше примере кода

Создание общедоступной переменной GUIStyle

При объявлении общедоступной переменной GUIStyle все элементы стиля будут отображаться в инспектореокне Unity, которое отображает информация о текущем выбранном игровом объекте, активе или настройках проекта, позволяющая просматривать и редактировать значения. Дополнительная информация
См. в Словарь
. Здесь вы можете редактировать все различные значения.

/* Overriding the default Control Style with one you've defined yourself */ // JavaScript var customButton : GUIStyle; function OnGUI () { // Make a button. We pass in the GUIStyle defined above as the style to use GUI.Button (Rect (10,10,150,20), "I am a Custom Button", customButton); } // C# using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { public GUIStyle customButton; void OnGUI () { // Make a button. We pass in the GUIStyle defined above as the style to use GUI.Button (new Rect (10,10,150,20), "I am a Custom Button", customButton); } }

Изменение различных элементов стиля

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

Стили изменяются для каждого сценария и каждого игрового объекта.
Стили изменяются для каждого сценария и каждого игрового объекта.

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

Дополнительную информацию об отдельных стилях GUIStyle см. на странице справочника по компонентам стиля GUIStyle.

Работа со скинами

Для более сложных систем с графическим интерфейсом имеет смысл хранить коллекцию стилей в одном месте. Это то, что делает GUISkin. GUISkin содержит несколько различных стилей, по сути, обеспечивая полную подтяжку лица для всех элементов управления графического интерфейса.

Создание новой оболочки GUISkin

Чтобы создать GUISkin, выберите Активы->Создать->GUI Skin в строке меню. Это создаст скин GUI в вашей папке проекта. Выберите его, чтобы просмотреть в Инспекторе все стили GUIStyle, определенные скинами.

Применение темы оформления к графическому интерфейсу

Чтобы использовать созданный вами скин, назначьте его GUI.skin в своей функции OnGUI().

/* Make a property containing a reference to the skin you want to use */ // JavaScript var mySkin : GUISkin; function OnGUI () { // Assign the skin to be the one currently used. GUI.skin = mySkin; // Make a button. This will get the default "button" style from the skin assigned to mySkin. GUI.Button (Rect (10,10,150,20), "Skinned Button"); } // C# using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { public GUISkin mySkin; void OnGUI () { // Assign the skin to be the one currently used. GUI.skin = mySkin; // Make a button. This will get the default "button" style from the skin assigned to mySkin. GUI.Button (new Rect (10,10,150,20), "Skinned Button"); } }

Вы можете сколько угодно переключать скины с помощью одного вызова OnGUI().

/* Example of switching skins in the same OnGUI() call */ // JavaScript var mySkin : GUISkin; var toggle = true; function OnGUI () { // Assign the skin to be the one currently used. GUI.skin = mySkin; // Make a toggle. This will get the "button" style from the skin assigned to mySkin. toggle = GUI.Toggle (Rect (10,10,150,20), toggle, "Skinned Button", "button"); // Assign the currently skin to be Unity's default. GUI.skin = null; // Make a button. This will get the default "button" style from the built-in skin. GUI.Button (Rect (10,35,150,20), "Built-in Button"); } // C# using UnityEngine; using System.Collections; public class GUITest : MonoBehaviour { public GUISkin mySkin; private bool toggle = true; void OnGUI () { // Assign the skin to be the one currently used. GUI.skin = mySkin; // Make a toggle. This will get the "button" style from the skin assigned to mySkin. toggle = GUI.Toggle (new Rect (10,10,150,20), toggle, "Skinned Button", "button"); // Assign the currently skin to be Unity's default. GUI.skin = null; // Make a button. This will get the default "button" style from the built-in skin. GUI.Button (new Rect (10,35,150,20), "Built-in Button"); } }

Изменение размера шрифта графического интерфейса пользователя

В этом примере показано, как динамически изменять размер шрифта с помощью кода.

Сначала создайте новый проект в Unity. Затем создайте сценарий C# с именем Fontsize.cs и вставьте в него следующий код:

// C# example using UnityEngine; using System.Collections; public class Fontsize : MonoBehaviour { void OnGUI () { //Set the GUIStyle style to be label GUIStyle style = GUI.skin.GetStyle ("label"); //Set the style font size to increase and decrease over time style.fontSize = (int)(20.0f + 10.0f * Mathf.Sin (Time.time)); //Create a label and display with the current settings GUI.Label (new Rect (10, 10, 200, 80), "Hello World!"); } }

Сохраните сценарий и прикрепите его к пустому GameObjectфундаментальному объекту в сценах Unity, который может представлять персонажей, реквизит, пейзажи, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
. Нажмите кнопку воспроизведения, чтобы увидеть, как шрифт увеличивается и уменьшается в цикле. размер со временем. Вы можете заметить, что шрифт не меняет размер плавно, потому что не существует бесконечного количества размеров шрифта.

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

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