Layout

ㅋㅋ·2022년 9월 6일
0

Layout은 사용 시에 시작할 때는 Begin...(),

끝날 때는 End...() 함수를 사용하여 쌍을 이루도록 한다.

for (int i = 0; i < 3; i++)
{
    EditorGUILayout.BeginVertical();
    {
        EditorGUILayout.LabelField($"Title: {i}");

        var backupFieldWidth = EditorGUIUtility.fieldWidth;
        var backupLabelWidth = EditorGUIUtility.labelWidth;

        EditorGUIUtility.fieldWidth = 30f;
        EditorGUIUtility.labelWidth = 30f;

        EditorGUILayout.BeginHorizontal();
        {
            for (int j = 0; j < 3; j++)
            {
                EditorGUILayout.TextField(j.ToString(), $"Test layout {j}");
                        
                EditorGUILayout.Space(5);
            }
        }
        EditorGUILayout.EndHorizontal();

        EditorGUIUtility.fieldWidth = backupFieldWidth;
        EditorGUIUtility.labelWidth = backupLabelWidth;
    }
    EditorGUILayout.EndVertical();
}

특정 GUI의 길이를 EditorGUIUtility를 통해 설정할 수 있음

해당 길이는 전역적으로 사용하므로 수정 후 다시 복원해야 사이드 이펙트를 없앨 수 있다.


var rectArea = new Rect(30, 30, 600, 300);
GUILayout.BeginArea(rectArea, GUI.skin.window);
{
    EditorGUILayout.BeginHorizontal();
    {
        EditorGUILayout.LabelField("test label");
        EditorGUILayout.LabelField("test label");
        EditorGUILayout.LabelField("test label");
    }
    EditorGUILayout.EndHorizontal();
}
GUILayout.EndArea();

에디터 내의 새로운 영역은 GUILayout의 Area로 설정 가능

Area을 시작하면 해당 Area의 왼쪽 상단이 기준점이 된다.


using (var scope = new EditorGUILayout.HorizontalScope())
{
    GUI.Button(scope.rect, GUIContent.none);

    for (int i = 0; i < 5; i ++)
    {
        GUILayout.Label("test Label");
        GUILayout.Box(EditorGUIUtility.FindTexture("Animation.Play"));
    }
}

using 키워드와 Scope 함수들로 begin, end 함수들을 대체할 수 있음

0개의 댓글