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 함수들을 대체할 수 있음