Unity5의 GUI 클래스에 추가된 Scope 정보

6790 단어 unity5Unity
Begin/End에서 수행되는 GUI 그룹의 지원 기능입니다.using 상태를 사용하여 IDisposable 객체로 표현할 수 있습니다.

사용법


지금까지
void OnGUI ()
{
    GUILayout.BeginHorizontal();

    GUILayout.Label("Label 1");
    GUILayout.Label("Label 2");

    GUILayout.EndHorizontal();
}
앞으로는 다음과 같은 관리가 가능하다.
void OnGUI ()
{
    using (var scope = new GUILayout.HorizontalScope()) {

        GUILayout.Label ("Label 1");
        GUILayout.Label ("Label 2");

    }
}

원래 Scope 작성


어셈블러 브라우저로 Horizontal Scape를 보면 계승GUI.Scope할 수 있을 것 같다.

IndentScape을 만들어 보도록 하겠습니다.


GUI 편집은 EditorGUI.indentLevel에 따라 들여쓰기를 변경할 수 있습니다.Scape로 이것을 실현시키자.
IndentScope.cs
using UnityEngine;
using UnityEditor;
public class IndentScope : GUI.Scope
{
    int _indentLevel;

    public IndentScope (int indentLevel)
    {
        _indentLevel = EditorGUI.indentLevel;
        EditorGUI.indentLevel = indentLevel;
    }

    protected override void CloseScope ()
    {
        EditorGUI.indentLevel = _indentLevel;
    }
}
다음과 같이 사용할 수 있습니다.
NewBehaviourScript.cs
using UnityEngine;
using System.Collections;
using UnityEditor;

public class NewBehaviourScript : EditorWindow
{
    [MenuItem("Window/Example")]
    static void Open ()
    {
        GetWindow<NewBehaviourScript> ();
    }

    void OnGUI ()
    {
        using (var scope = new IndentScope(0)) {
            EditorGUILayout.LabelField ("IndentLevel 0");
        }

        using (var scope = new IndentScope(1)) {
            EditorGUILayout.LabelField ("IndentLevel 1");
        }

        using (var scope = new IndentScope(2)) {
            EditorGUILayout.LabelField ("IndentLevel 2");
        }
    }
}

좋은 웹페이지 즐겨찾기