Unity Toolbars API를 사용하여 메인 툴바 사용자 정의하기
요약
Unity 6.3의 새로운 툴바 API를 활용하여 Unity 에디터를 사용자 정의하는 방법을 안내합니다. 복잡한 확장 없이도 커스텀 버튼, 드롭다운 등을 만들어 작업 효율을 높일 수 있습니다. 본 가이드는 단계별로 툴바 구축 과정을 보여주며, 핵심적인 에디터 스크립팅 패턴 학습에 초점을 맞춥니다.
핵심 포인트
- Unity 6.3의 강력한 툴바 API를 사용해 에디터를 커스터마이징할 수 있습니다.
- 커스텀 툴바는 별도의 복잡한 확장 없이도 구축을 시작할 수 있습니다.
- 사용자 정의 도구 제작 시, 'Editor' 폴더에 스크립트를 배치하는 것이 중요합니다.
- MonoBehaviour 대신 빈 스크립트와 클래스 이름을 활용하여 커스텀 기능을 구현합니다.
오늘 우리는 Unity 내부에서 매일 시간을 절약해 줄 무언가를 구축할 것입니다. Unity 6.3의 새로운 기능으로 강력한 툴바 API가 포함되어 있어 자신만의 버튼, 드롭다운 및 워크플로우 도구로 Unity 에디터를 사용자 정의할 수 있습니다. 가장 좋은 점은 복잡한 에디터 확장을 만들 필요 없이 시작할 수 있다는 것입니다. 이 비디오에서는 커스텀 툴바를 단계별로 구축해 볼 것입니다. 간단한 툴바 버튼부터 시작하여 Unity 에디터 툴바에서 일반적인 워크플로우를 직접 빠르게 처리하는 방법을 배울 것입니다. 과정 중에 여러분은 Unity 에디터 스크립팅의 핵심 패턴을 배우게 되어 자신만의 프로젝트와 파이프라인에 맞는 도구를 구축할 수 있게 될 것입니다. 그럼 바로 시작해 봅시다. 먼저 메인 툴바를 사용자 정의하기 시작할 수 있습니다. 메인 툴바에서 마우스 오른쪽 버튼을 클릭하여 편집 모드(edit mode)로 진입하고 이 공간 내의 개별 객체들을 편집할 수 있습니다. 편집 가능한 객체들이 파란색으로 강조 표시된 것을 확인하세요. 우리는 왼쪽 클릭 후 드래그하는 것만으로도 이 객체들을 움직일 수 있고, 오른쪽 클릭하여 숨길 수도 있습니다. 이제 편집 모드를 종료하려면 단순히 마우스 오른쪽 버튼을 클릭하고 편집 모드(edit mode)를 끄면 됩니다. 또한 Control 키를 누른 상태에서 왼쪽 클릭하며 드래그하여 요소들을 이동시킬 수도 있습니다. 현재 제 툴바가 좀 지저분합니다. 툴바에서 다시 마우스 오른쪽 버튼을 클릭한 다음, 프리셋(presets)으로 가서 Unity 기본값으로 되돌아갑니다. 저장하지 않고 계속 진행하면 원하는 상태로 초기화됩니다. 또한 여기의 메뉴들을 통해 마우스 오른쪽 버튼을 클릭하여 표시하거나 숨기고 싶은 다양한 요소들을 켜고 끌 수도 있습니다. '모두 보기(show all)'와 '모두 숨기기(hide all)' 요소도 있다는 것을 확인할 수 있습니다. 모두 숨기려면 다시 마우스 오른쪽 버튼을 클릭한 다음, 서비스 패널(services panel)로 들어가서 모두 보이게 할 수 있습니다. 제 경우 메인 툴바의 많은 부분을 숨기고 싶습니다. 프로필에서 마우스 오른쪽 버튼을 클릭하여 그것과 에셋 스토어(asset store)도 숨기겠습니다.
패키지 관리자(package manager)에서도 AI 툴과 버전 관리(version control)를 제거할 것입니다. 이 프로젝트에서 사용하지 않기 때문입니다. 이것도 숨길 것입니다. 이렇게 하면 작업을 시작할 수 있는 툴바 공간이 충분히 생깁니다. 이제 기억하세요. 언제든지 마우스 오른쪽 버튼을 클릭한 다음 프리셋(presets)으로 이동하여 'Unity 기본값 유지 및 저장 안 함(Unity Default Continue Without Saving)'을 켜면 모든 것이 기본 설정으로 재설정됩니다. 메인 툴바를 수정하는 것은 좋지만, 실제로 맞춤 설정하기 시작하고 싶습니다. 이를 시작하려면 에셋 폴더에서 마우스 오른쪽 버튼을 클릭하여 새 폴더를 만들고 'Editor'라고 이름을 지정합시다. 언제든지 메인 툴바를 변경하거나 사용자 정의하고 싶을 때 이 파일들을 Editor 폴더에 넣어야 합니다. 이제 Editor 폴더가 생성되었으니, 그 안으로 들어가서 마우스 오른쪽 버튼을 클릭하고 새로운 MonoBehavior 스크립트를 만듭니다. MonoBehaviour 스크립트를 만들 수도 있고, Scripting으로 가서 빈 스크립트(empty script)를 선택할 수도 있습니다. 이것에 스크립트에 클래스 이름(class name)을 부여할 것입니다. 이 클래스 이름은 원하는 어떤 것이든 될 수 있지만, 일반적으로 사용자 정의 툴바 요소의 이름을 반영합니다. 이 경우 'Custom Main Toolbar'라고 부르겠습니다. 선호하는 IDE에서 이것을 엽니다. 빈 스크립트를 생성하면 MonoBehaviour를 상속받지 않았고 우리가 처리해야 할 보일러플레이트 코드(boilerplate code)가 없다는 것을 알 수 있습니다. 왜냐하면 이 스크립트가 Editor 폴더 안에 있기 때문에, 이 스크립트는 완전히 Unity 에디터 내부에 존재합니다. 메인 툴바를 사용자 정의하는 작업을 시작하려면 'MainToolbarElement' 속성을 사용해야 합니다. 대괄호로 열고 닫은 다음 MainToolbarElement를 사용합니다. 이것이 UnityEditor.Toolbars 라이브러리를 가져오는 것을 알아차리세요. 이 속성 안에서 우리가 이 툴바 요소가 폴더 구조의 어디에 위치하기를 원하는지 설정해야 합니다. 따라서 메인 툴바에서 마우스 오른쪽 버튼을 클릭할 때, 'Project' / 'Open Project Settings'와 같은 것이 보이기를 원합니다. 이제 우리의
메뉴 세트를 추가한 다음, 기본 도킹 위치에 배치할 수 있습니다. 따라서 기본 도킹 위치를 사용하고, 이를 메인 툴바의 도킹 위치(왼쪽, 중앙 또는 오른쪽)와 동일하게 설정하겠습니다. 여기서는 'dock left'로 하겠습니다. 이제 이 속성은 Unity에게 이 메서드를 메인 Unity 툴바의 요소로 등록하도록 지시합니다. 다음에 해야 할 일은 팩토리 메서드를 추가하는 것입니다. 이 팩토리 메서드는 public static MainToolbarElement가 될 것이며, 팩토리 메서드에 이름을 부여하기만 하면 됩니다. 여기서는 프로젝트 설정(project settings)을 위해 사용하겠습니다. '프로젝트 설정 버튼'으로 하겠습니다. 이 메서드는 실제 툴바 UI 요소를 생성하고 반환할 것입니다. Unity는 툴바를 빌드할 때 자동으로 이 메서드를 호출합니다. 이제 MainToolbarElement는 버튼, 드롭다운, 토글과 같은 툴바 컨트롤의 기본 타입입니다. 여기서는 메인 툴바 버튼을 반환하길 원합니다. 다음으로 메서드를 열고 닫겠습니다. 다음에 아이콘을 로드해야 합니다. 이를 'icon'이라는 변수에 저장하여 수행할 수 있으며, EditorGUIUtility를 사용하여 필요한 아이콘 콘텐츠를 가져올 것입니다. 문자열을 전달해야 하며, 이것은 아이콘의 이름이 될 것입니다. 여기서는 'settings icon'을 사용하겠습니다. 그런 다음 이를 이미지로 추출합니다. 즉, .imageAsTexture2D입니다. 이 줄은 GUI 콘텐츠에서 이미지를 추출하여 텍스처로 변환하는 역할을 합니다. 현재는 사용자 지정 아이콘을 사용하는 것이 가능하지만, 일단 그대로 두겠습니다. 툴바 콘텐츠의 이름과 툴바 콘텐츠를 추가할 것입니다. 다음으로 툴바 콘텐츠를 생성하고 싶습니다. 따라서 'content'라는 다른 변수를 만들고 새로운 MainToolbarContent를 생성할 것입니다. 이 안에 방금 가져온 아이콘을 전달하고 싶습니다. 그래서 icon을 사용할 것이며, 자, 이제 MainToolbarContent 함수는 아이콘, 텍스트, 그리고 툴팁을 정의합니다. 이것은 툴바 요소에만 해당됩니다. 여기서는 아이콘만 사용되고 있습니다. 다음과 같은 것도 할 수 있습니다.
여기에 텍스트를 추가하고 콜론(:)을 사용한 다음, 원하는 텍스트 문자열을 전달할 수 있습니다. 'settings'라고 말하고, 쉼표(,)를 사용하여 툴팁으로 'open project settings'라는 또 다른 문자열을 전달할 수 있고, 마지막으로 아이콘을 추가합니다. 이 경우 이미지를 사용해야 합니다. 그리고 아이콘이 필요합니다. 이제 버튼을 생성해야 합니다. 이를 위해 새로운 메인 툴바 버튼을 반환할 것입니다. 버튼은 콘텐츠를 가져야 합니다. 자, 우리의 콘텐츠를 전달하고 이번에는 람다 표현식(lambda expression)을 사용할 것입니다. 여기서는 익명 함수(anonymous function)가 될 것입니다. 열고 닫는 중괄호({})를 사용하고, 프로젝트 설정을 열어야 하므로 settingsService.openProjectSettings를 사용할 것입니다. 세미콜론으로 끝냅니다. 이제 우리의 익명 함수 뒤에 세미콜론을 추가해야 합니다. 이제 Unity로 이동하여 실제로 작동하는 것을 보겠습니다. 다시 Unity 안에서 메인 툴바를 마우스 오른쪽 버튼으로 클릭하면, 우리가 만든 'Project' 메뉴가 보입니다. 그리고 'Open Project Settings'가 있습니다. 이것을 활성화해 봅시다. 그러면 아이콘과 텍스트, 그리고 툴팁이 있는 것을 볼 수 있습니다. Ctrl 키를 누른 채로 드래그하여 원하는 곳 어디든 이동시킬 수 있지만, 기본값은 왼쪽에 설정되어 있습니다. 이것을 클릭하면 프로젝트 설정이 열리고 매우 빠르게 접근할 수 있습니다. 프로젝트 설정을 여는 것은 좋은 기능이지만, 툴바를 사용하여 정말 흥미로운 것들을 시작할 수 있습니다. 새로운 스크립트를 만들겠습니다. 여기서는 또 다른 빈 C# 스크립트를 만들고 'CubeCreator'라고 이름을 붙이겠습니다. 열어보고 클래스 안에 우리의 [MainToolbarElement] 속성을 사용하고, 경로(path)를 추가하겠습니다. 이는 'your company'와 슬래시(/)로 시작하는 것을 하겠습니다. 그리고 'CreateCube'를 할 것입니다. 위치(position)도 설정해야 합니다. 기본 도킹 위치(default dock position)가 될 것이고, 메인 툴바 위치(main toolbar position)를 하겠습니다. 이번에는 오른쪽으로 하겠습니다.
툴바를 만들어야 하므로, 버튼으로 만들겠습니다. private static MainToolbarElement를 사용하고 이것을 createCubeButton이라고 부르겠습니다. 열고 닫는 중괄호를 사용하여 단순히 우리의 버튼을 반환합니다. 즉, return new MainToolbarButton입니다. 여기에 새로운 콘텐츠를 만듭니다. 그리고 이 안에서 new MainToolbarContent라고 말할 수 있습니다. 텍스트가 있는 무언가를 전달하기만 하면 됩니다. 이 버튼은 'create cube'라고 표시될 것이고, 또한 툴팁을 추가할 수도 있습니다. 이 툴팁에는 '월드 원점(world origin)에 큐브 생성'이라고 적겠습니다. 이제 첫 번째 괄호 뒤에서 여기에서 쉼표를 사용할 것입니다. 여기에 익명 함수(anonymous function)를 사용하려고 하지만, 우리가 직접 함수를 만들고 싶습니다. createCube라는 이름의 함수를 만드는 작업을 진행하겠습니다. 마지막 괄호 뒤에 세미콜론을 추가합니다. 이제 이 함수를 공급해야 하므로, 새로운 함수를 만듭니다. private static void createCube() 열고 닫는 괄호를 사용하고 열고 닫는 중괄호를 사용합니다. 우리가 해야 할 첫 번째 일은 큐브를 생성하는 것입니다. 따라서 'cube'라는 이름의 GameObject 타입을 사용할 것이고, 이것을 gameObject.createPrimitive에 할당할 것입니다. 프리미티브 타입으로 큐브를 전달하겠습니다. 다음으로 하고 싶은 것은 큐브의 이름을 지정하는 것입니다. 그래서 우리의 인스턴스인 cube.name을 사용하고 이것을 단순히 'cube'에 할당합니다. 다음으로 큐브의 위치를 지정하고 싶습니다. 따라서 cube.transform.position = Vector3(0, 0, 0)을 사용할 것입니다.
이렇게 하면 우리의 큐브가 월드 원점(world origin)에 위치하게 됩니다. 이 오브젝트를 생성하면서 저희는 언두(undo) 기능을 지원하고 싶습니다. 따라서 언두 지원을 등록해야 합니다. undo 키워드를 사용해서 .registerCreatedObjectUndo를 사용할 수 있습니다. 여기에 큐브 인스턴스와 'create cube'라는 이름을 전달해야 하는데, 이것은 언두할 액션의 단순한 이름입니다. 지금은 이걸 안 해도 오브젝트는 여전히 생성되겠지만, 언두가 제대로 작동하지 않아 도구가 고장 난 것처럼 보이거나 비전문적으로 느껴질 것입니다. 그 후에 우리는 이 오브젝트를 선택(select)된 상태로 만들고 싶습니다. 그래서 selection.activeGameObject = cube를 열어볼 것입니다. 이것은 단순히 큐브가 생성되자마자 해당 오브젝트를 선택하는 역할을 합니다. 마지막으로 중요하다고 생각되는 한 가지는, 오브젝트가 생성된 후에 씬 뷰 카메라(scene view camera)로 그 오브젝트에 초점을 맞추는 것(frame)입니다. 이제 if 문을 사용하여 할 수 있습니다. 여기서 '만약 sceneView의 lastActiveSceneView가 null이 아니라면'이라고 말하고, 씬 뷰를 lastActiveView.frameSelected로 설정할 것입니다. 이것은 단순히 이 카메라를 우리의 큐브 쪽으로 이동시키고 그 위에 초점을 맞추는 역할을 합니다. 왜냐하면 우리가 선택을 방금 했기 때문에, 이것은 자동으로 마지막으로 선택된 오브젝트에 맞춰져서 프레임이 잡히게 됩니다. 이제 Unity 에디터에서 테스트해 봅시다. 기억하세요. 새로운 툴바 엘리먼트(toolbar element)를 생성한 후에는 메인 툴바에서 마우스 오른쪽 버튼을 클릭하면, 저희 회사 이름과 'create cube'가 있는 것을 볼 수 있습니다. 이것이 오른쪽 위치에 도킹되어 있다는 점에 주목하세요. 여전히 Ctrl 키를 누른 채로 움직여서 원하는 곳에 도킹할 수 있습니다. 이제 'create cube' 버튼을 클릭해 봅시다. 큐브가 생성되고 카메라가 그 오브젝트에 맞춰지는 것을 볼 수 있습니다. 이 시점에서 우리는 프로젝트 설정을 열기 위한 버튼과 툴바에서 큐브를 직접 생성하는 버튼, 단 두 가지 간단한 도구만 만들었습니다. 하지만 여러분은 이미 더 큰 아이디어를 보기 시작했을 것입니다. 툴바 API는 단순히 버튼에 관한 것이 아닙니다. 마찰(friction)을 줄이는 것에 관한 것입니다. 모든 개발자는 작은 작업들을 가지고 있습니다.
반복적으로, 그리고 아주 작은 에디터 스크립팅만으로 그러한 반복적인 작업들은 흐름을 방해하는 것이 아니라 여러분의 워크플로우 일부가 됩니다. 이제 툴바 API에 대해 더 알고 싶다면 설명란의 링크를 확인해 보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 YouTube Unity 공식의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기