프로젝트가 열릴 때마다 사전 정의된 블루프린트 그래프를 항상 실행하도록 언리얼 에디터(Unreal Editor) 를 설정할 수 있습니다. 이를 통해 프로젝트를 여는 사용자나 컴퓨터와 관계없이 편집 환경을 원하는 방식으로 설정되도록 할 수 있습니다. 예를 들어 콘텐츠 개발 파이프라인의 요구 또는 제작 기준에 따라, 생성한 편집 시스템을 초기화하고, 콘텐츠를 로드 및 수정하고, 디스크에서 에셋(Assets) 을 리임포트하여 최신 수정 사항을 얻고, 커스텀 에디터 유틸리티 위젯(Editor Utility Widgets) 을 열거나 편집 세션 중에 발생할 수 있는 이벤트에 바인딩할 수 있습니다.
이 페이지의 지침에서는 에디터 전용 블루프린트 클래스를 스타트업 오브젝트(Startup Objects) 로 등록하여 언리얼 에디터가 시작할 때마다 해당 오브젝트에서 함수를 호출하도록 하는 방법을 설명합니다.
이 지침은 EditorUtilityObject 에서 직간접적으로 파생되는 모든 에디터 유틸리티 블루프린트와 모든 에디터 유틸리티 위젯에 적용됩니다.
단계
EditorUtilityObject 에서 파생된 에디터 유틸리티 블루프린트나 에디터 유틸리티 위젯이 없으면 생성합니다. 예를 들어 이 지침에서는 다음과 같이 새 에디터 유틸리티 블루프린트를 생성합니다.
콘텐츠 브라우저(Content Browser) 에서 우클릭하고 에디터 유틸리티(Editor Utility) > 에디터 유틸리티 블루프린트(Editor Utility Blueprint) 를 선택합니다.
부모 클래스를 선택합니다. EditorUtilityObject 를 선택하는 것이 안전하지만 EditorUtilityObject 에서 파생된 다른 클래스를 선택할 수도 있습니다. 생성(Create) 을 클릭합니다.
새 클래스를 설명하는 이름을 입력하고 Enter 를 누릅니다.
블루프린트 클래스를 더블클릭하여 블루프린트 에디터(Blueprint Editor) 에서 엽니다.
해당 클래스의 Run 함수를 오버라이드합니다.
내 블루프린트(My Blueprint) 패널의 함수(Functions) 그룹 위에 마우스 커서를 올리면 오버라이드(Override) 버튼이 나타납니다. 오버라이드(Override) 버튼을 클릭하고 드롭다운 목록에서 Run 을 선택합니다.
블루프린트 에디터가 이벤트 그래프(Event Graph) 에 새 Event Run 노드를 생성합니다. 여기에 트리거하려는 블루프린트 로직을 추가합니다.
예를 들어 이 구현에서는 함수가 호출되었음을 가리키는 메시지를 로그에 쓰고 에디터의 디폴트 스타트업 레벨 중앙에 큐브를 스폰합니다.
블루프린트 클래스를 컴파일(Compile) 및 저장(Save) 합니다.
언리얼 에디터를 종료합니다.
프로젝트 폴더 내
Project/Config/<플랫폼>/DefaultEditorPerProjectUserSettings.ini
에 위치한DefaultEditorPerProjectUserSettings.ini
파일을 찾습니다. 텍스트 에디터에서 엽니다.파일의 다음 섹션을 찾습니다.
[/Script/Blutility.EditorUtilitySubsystem]
이 섹션이 존재하지 않으면 만듭니다.
스타트업 오브젝트로 동작하기 원하는 각각의 블루프린트 클래스에 대하여 해당 클래스의 경로를
StartupObjects
배열의 새 값으로 추가합니다. 경로는/Game/
으로 시작하고 콘텐츠 브라우저(Content Browser) 에 표시된 대로 블루프린트 클래스 경로를 추가합니다. 오브젝트 이름 뒤에 마침표(.
)를 붙이고 오브젝트 이름을 반복합니다.예를 들어 위의 1단계에서 만든 오브젝트를 등록하려면 다음과 같이 지정합니다.
[/Script/Blutility.EditorUtilitySubsystem] StartupObjects=/Game/ThirdPerson/CustomBP/MyStartupObject.MyStartupObject
스타트업 오브젝트 여러 개를 등록해야 하는 경우, 추가하는 라인마다 첫머리에 더하기 문자(
+
)를 삽입합니다. 예를 들어 세 개의 스타트업 오브젝트가 포함된 환경설정은 다음과 같은 모습일 수 있습니다.[/Script/Blutility.EditorUtilitySubsystem] StartupObjects=/Game/Folder/MyClass.MyClass +StartupObjects=/Game/AnotherFolder/MyOtherClass.MyOtherClass +StartupObjects=/Game/AnotherFolder/MyThirdClass.MyThirdClass
.ini
파일을 저장하고 닫습니다.언리얼 에디터를 재시작하고 프로젝트를 다시 로드합니다.
최종 결과물
프로젝트를 다시 로드할 때 에디터 유틸리티 서브시스템에서는 스타트업 오브젝트로 식별한 각 블루프린트 클래스의 인스턴스를 자동으로 생성합니다. 각 인스턴스에 대하여 Run 함수의 커스텀 구현이 호출됩니다.
예를 들어 이전 단계에서 구현된 Run 함수는 두 가지 효과가 있습니다.
출력 로그(Output Log) 에 메시지를 출력합니다.
레벨 중앙에 큐브가 새롭게 스폰됩니다.
이미지를 클릭하면 전체 크기로 표시됩니다.
에디터 이벤트에 바인딩하기
스타트업 오브젝트의 유용한 사용법 중 하나는 사용자가 언리얼 에디터에서 프로젝트 콘텐츠로 작업할 때 발생할 수 있는 다른 이벤트에 블루프린트 클래스의 커스텀 이벤트를 바인딩하는 것입니다. 사용자가 프로젝트 콘텐츠를 열 때마다 스타트업 오브젝트가 반드시 호출되기 때문에 일관된 편집 경험을 보장할 수 있습니다.
예를 들어 이 Run 함수 구현에서는 에디터가 새 에셋을 임포트할 때마다 서브시스템 임포트(Import Subsystem) 에 의해 트리거되는 이벤트에 바인딩합니다. 이 경우 화면과 로그에 에셋 이름이 출력됩니다. 또한 새 에셋에 관하여 반환된 정보를 이용하여, 새 에셋의 이름 또는 폴더 위치가 프로젝트에서 사용하는 명명 규칙 및 콘텐츠 규칙과 일치하는지 검증하는 등의 추가 단계를 수행할 수 있습니다. 스타트업 오브젝트에 이러한 확인을 통합하면, 프로젝트에 콘텐츠를 제공하는 모든 사용자에게 동일한 검증 절차가 반드시 수행되도록 할 수 있습니다.
Bind Event to...(...에 이벤트 바인딩) 노드의 Event 입력에서 왼쪽으로 드래그한 후 이벤트 추가(Add Event) > 커스텀 이벤트 추가(Add Custom Event) 를 선택하여, 위의 In Factory(In 팩토리) 및 In Created Object(In 생성된 오브젝트) 와 같은 추가 입력을 노출하는 커스텀 이벤트 노드를 가져옵니다.
스타트업 오브젝트는 에디터가 시작될 때 존재하는 다른 오브젝트에만 바인딩할 수 있습니다. 또한 바인딩된 오브젝트가 메모리를 떠나면(예: 레벨을 닫고 다시 여는 경우) 해당 바인딩은 손실됩니다. 따라서 위의 예에 나오는 서브시스템과 같이 편집 세션 내내 사용할 수 있는 오브젝트로 바인딩하는 것이 가장 안전합니다.
블루프린트 이벤트에 바인딩하는 것에 대한 자세한 정보는 이벤트 디스패처와 이벤트 바인딩 및 바인딩 해제를 참조하세요. 서브시스템 및 서브시스템에 액세스하는 방법에 관한 자세한 내용은 서브시스템 프로그래밍을 참조하세요.