Unity의 GUI.Toolbar는 여러 버튼 중 하나의 선택 인덱스를 반환하는 IMGUI 컨트롤입니다. 2015년 예제 화면 다섯 장을 코드 선언, Inspector 연결, 실행 결과 순서로 다시 묶었습니다. 새 게임 UI라면 uGUI나 UI Toolkit을 우선 검토하되, 레거시 프로젝트와 빠른 디버그 도구에서는 이 구조를 이해할 가치가 있습니다.
선택값을 보관할
int, 버튼 문구를 담은 배열, 그리고 OnGUI() 안의 GUI.Toolbar가 필요합니다. 반환값을 다시 선택 변수에 저장하지 않으면 화면을 클릭해도 선택 상태가 유지되지 않습니다.버튼 문구와 선택 인덱스를 먼저 선언합니다

toolbarIndex의 0은 첫 번째 버튼을 뜻합니다. 문자열 배열의 순서가 화면 버튼 순서가 되며, 반환되는 인덱스도 0부터 시작해요. 배열을 바꾸면 선택값을 처리하는 switch나 조건문도 같은 순서인지 확인해야 합니다.
private int toolbarIndex;
private readonly string[] labels = { "아이템", "스킬", "설정" };
private void OnGUI()
{
toolbarIndex = GUI.Toolbar(
new Rect(20, 20, 300, 35),
toolbarIndex,
labels
);
}
OnGUI에서 반환값을 다시 저장합니다

GUI.Toolbar의 반환값을 선택 변수에 다시 대입하는 위치입니다.
Rect는 왼쪽, 위쪽, 너비, 높이 순서의 픽셀 좌표입니다. Game 뷰 크기가 달라지면 배치가 어긋날 수 있으므로 레거시 코드를 유지할 때는 화면 크기를 기준으로 좌표를 계산하거나 디버그용 고정 화면에서만 사용하세요.
Inspector 연결과 Play 모드를 확인합니다

코드 파일만 만들어서는 OnGUI가 호출되지 않습니다. 스크립트를 활성 GameObject에 붙이고 Console의 컴파일 오류가 없는지 확인한 뒤 Play 모드로 들어갑니다. 클래스명과 파일명이 다르거나 컴파일 오류가 하나라도 있으면 Inspector에서 스크립트가 정상 컴포넌트로 보이지 않을 수 있습니다.
선택 결과는 인덱스로 분기합니다

switch (toolbarIndex)
{
case 0:
DrawItems();
break;
case 1:
DrawSkills();
break;
case 2:
DrawSettings();
break;
}
선택값이 바뀔 때마다 비싼 파일 읽기나 네트워크 요청을 OnGUI 안에서 직접 실행하지 마세요. IMGUI는 한 프레임에도 여러 이벤트로 호출될 수 있습니다. 화면 그리기와 실제 상태 변경을 분리하고, 필요한 경우 선택값이 이전 값과 달라졌을 때만 작업하도록 구성합니다.
GUI.Toolbar와 현재 Toolbar는 이름이 같아도 용도가 다릅니다
GUI.Toolbar는 게임 화면이나 디버그 오버레이에 사용할 수 있는 IMGUI 함수입니다. 반면 UI Toolkit의 Toolbar는 에디터 전용 가로 컨테이너이며 ToolbarButton, ToolbarToggle, 검색 필드 등을 담습니다. 새 런타임 탭 UI를 만들려면 uGUI의 Button·Toggle 그룹 또는 UI Toolkit의 런타임 요소를 설계해야 합니다.
기존 이미지에 빨간 네모나 화살표가 있다면 현재 화면과 다르다는 이유로 지우지 않습니다. 그 표시는 선택 변수, 호출 인수, Inspector 연결처럼 독자가 봐야 할 지점을 지정하므로, 새 이미지로 교체할 때도 같은 대상을 명확히 표시해야 합니다.
작동하지 않을 때 확인할 순서
- Console에 컴파일 오류가 없는지 확인합니다.
- 스크립트가 활성 GameObject에 붙어 있는지 봅니다.
toolbarIndex = GUI.Toolbar(...)처럼 반환값을 저장했는지 확인합니다.- 선택 인덱스가 배열 범위를 벗어나지 않는지 확인합니다.
- Game 뷰 해상도에서
Rect가 화면 밖으로 나가지 않았는지 봅니다.
공식 자료
다섯 장의 기존 화면은 2015년 Unity 예제의 단계와 강조 의미를 보존했습니다. 현재 권장 방식과 메뉴 차이는 Unity 6 공식 문서를 기준으로 구분했습니다.
0 댓글