Version: Unity 6.0 (6000.0)
언어 : 한국어
IMGUI 컨트롤
IMGUI 레이아웃 모드

IMGUI 컨트롤 커스터마이즈

Unity의 IMGUI 시스템은 주로 개발자 툴과 디버깅 인터페이스를 만드는 데 사용되지만 여러 가지 방법으로 커스터마이즈하고 스타일을 지정할 수 있습니다. Unity의 IMGUI 시스템에서는 컨트롤의 형상을 다양한 디테일로 미세 조정할 수 있습니다. 컨트롤 형상은 GUIStyle 로 묘사됩니다. 기본적으로 GUIStyle을 정의하지 않고 컨트롤을 생성하면 Unity의 기본 GUIStyle이 적용됩니다. 이 스타일은 Unity 내부에 있으며, 빠른 프로토타이핑을 위해 퍼블리시된 게임이나 컨트롤의 스타일을 지정하지 않은 경우에 사용할 수 있습니다.

여러 개의 GUIStyle을 사용하는 경우 전부를 하나의 GUISkin 에서 정의할 수 있습니다. GUISkin은 GUIStyle의 컬렉션에 불과합니다.

스타일이 GUI 컨트롤의 모양을 바꾸는 방법

GUIStyle은 웹 브라우저의 CSS(Cascading Style Sheets)를 모방하도록 설계되었습니다. 스타일 지정을 위한 개별 상태 프로퍼티의 차별화 및 콘텐츠와 형상의 분리를 비롯하여 다양한 CSS 방법론이 적용되었습니다.

컨트롤이 콘텐츠를 정의하는 경우 스타일이 형상을 정의합니다. 이렇게 하면 일반 버튼 처럼 보이는 기능 토글 과 같은 조합을 만들 수 있습니다.

서로 다른 스타일의 토글 컨트롤 2개
서로 다른 스타일의 토글 컨트롤 2개

스킨과 스타일의 차이점

앞서 언급했듯이 GUISkin은 GUIStyle의 컬렉션입니다. 스타일은 GUI 컨트롤의 형상을 정의합니다. 스타일을 사용하려는 경우 스킨을 사용할 필요가 없습니다.

인스펙터에 표시되는 단일 GUIStyle
인스펙터에 표시되는 단일 GUIStyle

인스펙터에 표시된 단일 GUISkin - 여러 GUIStyle이 포함되어 있습니다.

스타일 작업

모든 GUI 컨트롤 함수에는 GUIStyle이라는 마지막 파라미터가 옵션으로 제공되며, 이는 컨트롤을 표시하는 데 사용됩니다. 생략될 경우 Unity의 기본 GUIStyle이 사용됩니다. 이는 컨트롤 유형의 이름을 문자열로 적용하여 내부적으로 작동하므로 GUI.Button() 은 ‘버튼’ 스타일을 사용하고, GUI.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");
    }

}
위의 코드 예제로 생성된 컨트롤
위의 코드 예제로 생성된 컨트롤

public 변수 GUIStyle 만들기

공용 GUIStyle 변수를 선언하는 경우 스타일의 모든 요소가 인스펙터 에 표시됩니다. 여기서 다른 값을 모두 편집할 수 있습니다.

/* 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을 선언하면 인스펙터에서 해당 스타일을 수정할 수 있습니다. 다양한 상태를 정의하고 모든 컨트롤 유형에 적용할 수 있습니다.

스타일은 스크립트별로, 게임 오브젝트별로 수정됩니다.
스타일은 스크립트별로, 게임 오브젝트별로 수정됩니다.

지정된 Text Color 가 적용되기 전에 모든 컨트롤 상태에 Background 컬러가 할당되어야 합니다.

개별 GUIStyle에 대한 자세한 내용은 GUIStyle 컴포넌트 레퍼런스 페이지를 참조하십시오.

스킨 작업

더 복잡한 GUI 시스템의 경우 한 곳에 스타일 컬렉션을 저장하는 것이 합리적입니다. 이러한 작업이 GUISkin의 역할입니다 GUISkin에는 여러 가지 스타일이 포함되어 있으며, 기본적으로 모든 GUI 컨트롤에 적합한 스타일을 제공합니다.

새 GUISkin 만드는 방법

GUISkin을 생성하려면 메뉴 바에서 Assets->Create->GUI Skin 을 선택해야 합니다. 이렇게 하면 프로젝트 폴더에 GUI Skin이 생성됩니다. 인스펙터에서 스킨에 정의된 모든 GUIStyle을 확인하려면 이를 선택합니다.

GUI에 스킨 적용

생성한 스킨을 사용하려면 OnGUI() 함수의 GUI.skin 에 스킨을 할당해야 합니다.

/* 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에서 새 프로젝트를 생성해야 합니다. 그런 다음, Fontsize.cs라는 C# 스크립트를 생성한 후 다음 코드를 붙여넣습니다.

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

스크립트를 저장하고 빈 게임 오브젝트에 연결합니다. 플레이 버튼을 클릭하면 시간이 지나면서 폰트의 크기가 커지거나 작아집니다. 폰트 크기가 매끄럽게 변경되지 않는데, 폰트 크기가 무한하지 않기 때문입니다

이 예제에서는 기본 폰트(Arial)를 로드하여 동적으로 표시해야 합니다. 동적으로 표시되지 않은 폰트의 크기는 변경할 수 없습니다.

IMGUI 컨트롤
IMGUI 레이아웃 모드