Unity 6.3
0 онлайн 101 гостей 3 в системе
Вход
UI системы Шаг 308 из 317

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

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

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

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

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

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

Два переключателя с разным стилем
Два переключателя с разным стилем

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

Как уже было сказано ранее, GUISkins представляют собой коллекцию GUIStyles. Стили определяют внешний вид GUI. Для использования стиля не обязательно использовать Skin.

Одиночный GUIStyle показан в Inspector
Одиночный GUIStyle показан в Inspector
Одиночный GUISkin показан в Inspector с несколькими GUIStyles
Одиночный GUISkin показан в Inspector с несколькими GUIStyles

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

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

/* Override the default Control Style with a different style in the UnityGUI default Styles */

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, все элементы стиля отображаются в Inspector. Вы можете редактировать все различные значения там.

/* Overriding the default Control Style with one you've defined yourself */

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, вы можете изменить этот стиль в Inspector. Существует большое количество состояний, которые вы можете определить и применить к любому типу управления.

Стилы модифицируются по скрипту, по GameObject
Стилы модифицируются по скрипту, по GameObject

Любому контролирующему состоянию должно быть присвоено 1. Справочная информация Цвет перед указанным Цвет текста будет применяться.

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

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

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

Создание нового GUISkin

Чтобы создать GUISkin, выберите Assets->Create->GUI Skin из меню. Это создаст GUI Skin в вашей папке Project. Выберите его, чтобы увидеть все GUIStyles, определенные Skin в Inspector.

Применение кожи на GUI

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

/* Make a property containing a reference to the skin you want to use */

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 */

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");
    }
        
}

Изменение размера шрифта GUI

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

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

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, нажмите play, чтобы увидеть шрифт цикл через увеличение и уменьшение размера со временем. Вы можете заметить, что шрифт не гладко меняется размер, это потому, что нет бесконечного количества размеров шрифта.

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