스크립터블 툴(Scriptable Tools) 시스템의 목표는 C++ 프로그래머가 아닌 사람도 언리얼 에디터에서 인터랙티브 툴을 빌드할 수 있도록 하는 것입니다. 인터랙티브 툴이 무엇인지에 대한 주요 참조 기준은 모델링 모드입니다. 하지만 스크립터블 툴 시스템은 모델링 또는 메시와 직접적으로 연결되어 있지 않습니다.
스크립터블 툴 시스템 플러그인인 ScriptableInteractiveTool 을 사용하면 인터랙티브 툴 프레임워크(Interactive Tools Framework) 를 블루프린트(BP)에 노출하여 크리에이터와 테크니컬 아티스트가 모델링 모드와 비슷하게 행동하는 툴을 디자인할 수 있습니다.
베이스 클래스의 BP 서브클래스를 생성함으로써 커스텀 사용자 정의 툴을 스크립터블 툴 에디터 모드 에 추가할 수 있습니다. 이러한 스크립터블 툴은 지오메트리 스크립팅과 함께 사용하여 복잡한 모델링과 에셋 편집 워크플로를 구현할 수 있습니다. 또한 모델링이나 지오메트리와 관련이 없는 더 단순한 함수에도 이 툴을 사용할 수 있습니다.
스크립터블 툴의 용도
스크립터블 툴을 사용하여 다음과 같은 작업을 수행할 수 있는 일종의 미니 모드를 생성할 수 있습니다.
- 툴 구성 및 종료, 그리고 틱 시에 임의의 블루프린트(BP) 그래프를 실행합니다.
- 기본 3D 지오메트리(선, 포인트) 및 2D HUD 지오메트리(투영된 3D 위치의 텍스트)를 그립니다.
- 블루프린트를 통해 정의되고 툴의 세팅 역할을 하는 프로퍼티 세트를 툴에 추가합니다.
- 이러한 프로퍼티 세트 파라미터 변경사항을 수신하고 대응합니다.
- 하나 이상의 3D 기즈모를 생성하고 그 위치를 제어하고 트랜스폼 변경사항에 대응합니다.
- 사용자에게 피드백 메시지를 제공합니다.
- 특히 뷰포트에서 클릭 및 클릭-드래그 인터랙션뿐 아니라 마우스 호버 및 shift, ctrl 및 alt 모디파이어 키 같은 특정 타입의 마우스 인터랙션을 캡처하고 대응합니다.
스크립터블 툴 에디터 모드에서 모든 스크립터블 툴에 액세스할 수 있습니다. 에디터 모드에서는 자동으로 관리되는 툴 팔레트에 각 툴이 표시되고, 활성 툴에 대한 프로퍼티 세트가 표준 에디터 모드 디테일 패널에 노출됩니다. 에디터 모드에 대한 자세한 내용은 툴 및 에디터를 참조하세요.
이 페이지의 스크립터블 툴 생성 섹션에는 레벨에 새로운 다이내믹 메시 스피어를 스폰하는 툴 생성에 대한 튜토리얼이 포함되어 있습니다.

스크립터블 툴 및 에디터 유틸리티 위젯
에디터 유틸리티 위젯(Editor Utility Widget, EUW)은 비모달 대화창으로, 비주얼 GUI 빌더로 빌드된 커스텀 UI가 포함되어 있어 모든 종류의 에디터 스크립팅을 수행할 수 있습니다. 이는 엄청나게 강력한 기능이지만, 비모달 대화창에는 다양한 제한 사항이 있습니다.
스크립터블 툴의 기반이 되는 인터랙티브 툴은 모달 입니다. 즉, 이 툴이 활성화된 동안 다른 툴은 활성화될 수 없으며, 에디터 상태가 더 엄격하게 관리됩니다. 예를 들어 이 툴은 저장이나 레벨 변경, 에디터에서 플레이(Play In Editor, PIE) 시작 전에 자동으로 종료되며, 툴을 종료할 때까지 자동 저장이 연기됩니다. 즉, 다른 툴보다 이 툴에서 많은 작업을 더 안전하게 수행할 수 있습니다. 예를 들어, 레벨에 임시 액터를 생성하고 툴 종료 시 소멸할 경우, 이 액터가 실수로 저장되는 일이 발생하지 않습니다.
마찬가지로 모달 상태에서는 툴이 마우스를 더 효율적으로 캡처할 수 있습니다.
UI의 경우, 스크립터블 툴은 EUW보다 더 구조화되어 있습니다. 프로퍼티 세트를 퍼블릭 변수를 사용하여 별도의 BP 오브젝트로 정의할 수 있습니다. 그러면 이러한 퍼블릭 변수는 표준 디테일(Details) 패널에 표시됩니다. 이러한 방식은 EUW보다 훨씬 간단한 방식이지만, 간단한 대신 당연히 많은 제한 사항이 따릅니다. 현재 스크립터블 툴을 위한 커스텀 UI를 빌드하는 방법은 없습니다.
스크립터블 툴은 기술적으로 런타임 시에도 사용할 수 있지만, UE 프로젝트에서 이를 활용하려면 일부 추가 인프라를 구성해야 합니다.
UInteractiveScriptabletool
UInteractiveScriptabletool 은 모든 스크립터블 툴을 위한 베이스 클래스입니다. 하지만, 에디터 툴을 빌드하려면 대체로 EditorInteractiveScriptabletool 을 서브클래스로 분류해야 하며, 그렇지 않으면 에디터 전용 BP 함수에 액세스할 수 없습니다.
스크립터블 툴 세팅
베이스 클래스는 주로 스크립터블 툴 에디터 모드 UI를 위한 다양한 세팅을 노출할 뿐 아니라 툴 행동도 제어합니다.
| 노드 | 설명 |
|---|---|
| 툴 이름(Tool Name) | 툴의 짧은 이름입니다. 이 이름은 현재 툴 아이콘 아래 표시됩니다. |
| 긴 이름(Long Name) | 툴 완료 버튼 옆과 같은 다른 위치에 표시됩니다. |
| 카테고리(Category) | 툴이 배치될 툴 팔레트 섹션을 결정합니다. |
| 툴팁(Tooltip) | 아이콘에 마우스를 올렸을 때 툴에 대한 정보를 제공하는 텍스트입니다. |
| 에디터에서 표시(Visible in Editor) | 이 툴 클래스를 해당 모드의 UI에 표시할지 여부를 결정합니다. 개발 중인 툴이나 서브클래스로 분류해야 하는 툴 BP 베이스 케이스를 숨기는 데 유용할 수 있습니다. |
| 셧다운 타입(Shutdown Type) | 툴이 수락/취소(Accept/Cancel) 스타일 툴인지 완료(Complete) 스타일 툴인지 결정합니다. 이는 툴 함수 기능에 영향을 주며 아래에서 더 자세하게 다룰 것입니다. |
스크립터블 툴 이벤트
스크립터블 툴 클래스는 툴이 서로 다른 시간에 다양한 작업을 수행할 수 있도록 표준 이벤트 세트를 제공합니다. 모든 툴 클래스에는 다섯 가지 표준 이벤트가 있으며, 아래에 설명된 베이스 툴 에서 다양한 추가 함수를 사용할 수 있습니다.
-
Event On Script Setup: 툴이 실행될 때 한 번 실행됩니다. 일반적으로 프로퍼티 세트를 추가하고 프리뷰 오브젝트를 생성하는 등의 작업을 수행합니다.
-
Event On Script Tick: 다른 틱처럼 에디터 틱마다 실행됩니다.
-
Event On Script Shutdown: 툴이 종료될 때 실행됩니다. 예를 들어, 사용자가 명시적으로 툴을 명시적으로 닫으면 이 모드가 툴을 강제 종료하거나 툴이 자체적으로 종료됩니다.
-
Event On Script Draw HUD: 프레임마다 실행되며 툴이 HUD API 오브젝트에서 2D HUD를 그릴 수 있습니다. 자세한 내용은 아래의 섹션을 참조하세요.
-
Event On Script Render: 프레임마다 실행되며 툴이 선이나 포인트 같은 간단한 3D 지오메트리를 그릴 수 있습니다.
툴 렌더링
툴에서 시각적 피드백을 제공해야 하는 경우는 상당히 흔합니다. 임시 액터를 스폰하는 등의 방법으로 언제든지 이 작업을 수행할 수 있는데, 예를 들어, 지오메트리 스크립트에 의해 절차적으로 생성된 메시로 임시 다이내믹 메시 액터를 스폰하여 매우 간단하게 이러한 작업을 수행할 수 있습니다. 하지만, 선이나 텍스트 라벨이 더 효과적일 때도 종종 있습니다.
툴은 UFunction 노드 세트를 제공하는 API 오브젝트를 제공하여 이러한 종류의 렌더링을 지원합니다. 2D Draw HUD 및 3D Render 이벤트 각각 DrawHUDAPI 및 RenderAPI 오브젝트를 사용하여 호출됩니다. 툴은 이러한 API 오브젝트를 내부적으로 생성하고 관리합니다. 툴에서 제공하는 프레임별 임시 상태 정보에 의존하므로 해당 오브젝트에는 이러한 이벤트를 통해서만 액세스할 수 있습니다.
또한, BP에서 사용할 수 있는 디버그 드로(Debug Draw) 함수의 표준 라이브러리도 있습니다. 이러한 함수는 DrawHUD 및 Render 함수의 대안으로 사용할 수도 있으며, 언제든지 호출할 수 있습니다. 하지만, 이러한 함수는 개발 전용이며, 결국에는 툴 렌더 API가 더 많은 함수 기능을 제공할 것입니다.
기즈모
스크립터블 툴 베이스 클래스의 또 다른 함수 기능은 여러 개의 3D 트랜스폼 기즈모를 생성하는 기능입니다. 이러한 기즈모는 표준 에디터 기즈모가 아니라 모델링 모드(Modeling Mode)의 기즈모입니다. 기즈모를 생성하고 관리하기 위한 함수 세트와 기즈모 변경사항에 대응하기 위한 이벤트가 제공됩니다.
기즈모 오브젝트는 블루프린트에 직접 노출되지 않습니다. 대신 스트링 식별자(Identifier) 를 사용하여 기즈모를 스폰하며, 다양한 기즈모 함수와 이벤트가 이 식별자를 통해 작동합니다.
| 노드 | 설명 |
|---|---|
| CreateTRSGizmo | 지정된 식별자(Identifier) 및 기즈모 옵션(Gizmo Options) 을 사용하여 TRS(이동(Translate), 회전(Rotate), 스케일(Scale)) 기즈모를 생성합니다. 자세한 내용을 아래의 옵션에 대한 정보를 참조하세요. |
| DestoryTRSGizmo | 이름으로 기존 기즈모를 소멸합니다. 툴의 컨텍스트에서 생성된 모든 기즈모는 툴 종료 시 소멸됩니다. |
| Get Gizmo Transform | 이름으로 기즈모에 현재 트랜스폼을 가져옵니다. |
| Get Gizmo Transform | 이름으로 기즈모에 현재 트랜스폼을 업데이트합니다. |
| Set Gizmo Visible | 이름으로 기즈모를 숨기거나 표시합니다. |
| Event On Gizmo Transform Changed | 모든 활성 기즈모가 트랜스폼될 때마다 실행됩니다. 식별자를 사용하여 수정된 기즈모를 구분합니다. |
기본 TRS 기즈모는 모든 축에 대한 이동, 회전 및 스케일 엘리먼트를 결합합니다. 하지만, 기즈모 옵션 을 커스터마이징하여 특정 작업을 위해 더 간단한 기즈모를 생성할 수 있습니다. 예를 들어, 다른 기즈모 서브 엘리먼트를 비활성화하여 XY 평면의 이동 및 회전만 활성화할 수 있습니다.
툴 메시징
표준 스크립터블 툴인 BP API는 사용자에게 메시지를 표시하기 위한 다양한 함수를 제공합니다.
-
사용자 도움말 메시지 표시(Display User Help Message) 는 에디터 UI의 하단에 도움말 스트링을 업데이트합니다.
-
사용자 경고 메시지 표시(Display User Warning Message) 는 툴 세팅(Settings) 패널에 스트링을 업데이트합니다.
- 사용자 메시지 지우기(Clear User Messages) 는 현재 도움말 메시지나 경고 메시지를 지우는 데 사용할 수 있습니다.
- 로그 메시지 추가(Add Log Message) 는 현재 에디터의 로그에 메시지를 인쇄합니다.
위의 메시지는 FText 스트링이므로 현지화할 수 있습니다. 현재는 하나의 경고만 표시할 수 있지만, 향후 개선될 것입니다._
기타
스크립터블 툴은 항상 현재 월드의 컨텍스트에서 실행됩니다. 예를 들어, 레벨 에디터에서는 표준 레벨 월드에서 실행됩니다. Get Tool World 함수를 사용하여 툴의 컨텍스트에서 이 월드에 액세스할 수 있습니다.
툴 종료
스크립터블 툴을 종료하는 표준 흐름은 UI에 표시된 수락( Accept), 취소(Cancel) 또는 완료(Complete) 버튼을 클릭하는 것입니다. 그렇지만, 자체 호출할 수 있는 Request tool Shutdown 함수를 사용하여 스크립터블 툴을 명시적으로 종료할 수도 있습니다. 이 함수는 수락/취소 스타일 툴과만 관련된 bAccept 플래그와 함께 선택적 사용자 팝업 메시지를 받습니다.
툴 프로퍼티 세트
스크립터블 툴은 표준 디테일 패널에 표시되는 프로퍼티 세트(Property Set) UObjects를 통해 사용자에게 UI 위젯을 노출할 수 있습니다. 현재는 블루프린트에서 이 UI를 커스터마이징할 방법이 없으므로 액터 BP의 파라미터에 대해 할 수 있는 것과 비슷한 표준 프로퍼티 세팅만 사용할 수 있습니다.
프로퍼티 세트 를 생성하려면 아래 이미지처럼 먼저 ScriptableInteractivetoolPropertySet 타입의 BP 서브클래스를 생성합니다.
그런 다음, 편집을 위해 프로퍼티 세트 서브클래스 BP를 열어 퍼블릭 멤버 변수를 추가하면 됩니다. 아래에서는 부울, 정수 및 열거형 타입을 추가합니다.
특정 스크립터블 툴에서 프로퍼티 세트를 사용하려면 Add Property Set of Type 함수를 사용합니다. 이 함수는 일반적으로 Event On Script Setup 에서 사용되지만, 어떤 포인트에서든 사용할 수 있습니다. Property Set Type 파라미터에 대한 올바른 클래스 타입을 선택해야 합니다. 위에서 생성한 BP 서브클래스의 타입 이름을 선택합니다. 또한, 각 프로퍼티 세트에 대해 고유한 식별자 를 설정해야 합니다. 하나의 툴에서 여러 프로퍼티 세트를 결합할 수 있습니다. 마지막으로, 나중에 이 프로퍼티 세트 오브젝트에 액세스해야 할 수 있으므로 Add Property Set Of Type 의 출력을 BP 서브클래스 타입에 캐스팅하고 로컬 변수에 저장하는 것이 좋습니다.
이제 사용자가 스크립터블 툴의 인스턴스를 생성하면, 프로퍼티 세트의 퍼블릭 멤버 변수가 왼쪽의 툴 팔레트 옆에 있는 스크립터블 툴(Scriptable Tools) 세팅 패널에 표시됩니다.
스크립터블 툴 클래스에는 프로퍼티 세트와 함께 작동하는 다양한 헬퍼 함수가 있습니다. Remove Property Set by Name 을 사용하여 프로퍼티 세트를 제거할 수 있지만, 대부분의 경우 이렇게 할 필요 없다는 점에 유의하세요. 단순히 어떤 기준이나 기타 파라미터 변경에 따라 프로퍼티 세트를 숨기거나 표시하고 싶다면, Set Property Set Visible by Name 을 사용하세요.
또한, 툴 종료 시 Save Property Set Settings 를 사용하여 프로퍼티 세트의 현재 값을 저장할 수 있으며, 이렇게 저장한 값은 툴 구성 시 Restore Property Set Settings 를 사용하여 복원할 수 있습니다. 기본적으로 해당 프로퍼티 세트 클래스를 사용하여 모든 툴에서 같은 값이 복원됩니다. 그러나 선택 사항으로 제공되는 저장 키(Save Key) 를 사용하면 다른 툴에서나 심지어 같은 툴 내에서도 다른 값을 저장하거나 복원할 수 있습니다.
프로퍼티 감시 툴
프로퍼티 세트로 가장 많이 하게 되는 작업 중 하나는 프로퍼티 세트 값 변경사항에 대응하는 것입니다. 이는 까다로운 작업이 될 수 있는데, 완전히 신뢰할 수 있는 유일한 솔루션은 틱 함수에서 값 변경사항을 폴링하는 것입니다. 하지만, 이는 일반적인 패턴이므로 스크립터블 툴에서는 이런 종류의 폴링을 자동으로 수행할 수 있는 유틸리티 프로퍼티 감시 툴(Property Watcher) 함수를 제공합니다.
스크립터블 툴에서 아래의 함수를 사용하여 프로퍼티 세트의 특정 프로퍼티 변경사항을 감시하고 값이 수정되면 이벤트를 호출할 수 있습니다.
BP에서는 현재 변수 레퍼런스에서 UProperty 타입을 자동으로 탐지할 수 없으므로 다음을 수행해야 합니다.
- 프로퍼티 세트의 퍼블릭 변수 타입과 일치하는 함수를 사용해야 합니다.
- 올바른 프로퍼티 이름(Property Name) (프로퍼티 세트의 퍼블릭 변수 이름)을 전달합니다.
타입이 Int, Float, Bool, String, FName, Enum 또는 Object Property 같은 단순 타입이 아니라면 범용 Watch Property 버전을 사용할 수 있지만, 이러한 버전의 콜백 이벤트는 더 제한적입니다.
아래는 Watch Enum Property 함수의 사용 예시입니다. Enum 타입은 알 수 없으므로 단순 타입 중 가장 복잡한 타입입니다. 콜백 이벤트에 전달할 새 값(New Value) 파라미터는 uint8이며 올바른 UEnum 타입, 이 경우에는 EGeometryScriptAxis 에 명시적으로 캐스팅되어야 합니다. 현재 여기서는 오류 확인을 진행할 수는 없으며, 이 함수는 Enum 타입으로 캐스팅됩니다.
마지막으로, FVector 멤버 변수 같은 중첩된 UStruct처럼 더 복잡한 파라미터의 경우, Watch Property 함수를 사용할 수 있습니다. 이 함수는 거의 모든 UProperty 변수의 변경사항을 탐지할 수 있지만, 콜백 이벤트는 다른 필드처럼 새 값(New Value) 파라미터를 수신하지 않습니다. 그렇지만 툴의 프로퍼티 세트에 대한 멤버 변수를 생성한 경우, 직접 이벤트의 프로퍼티 값을 가져올 수 있습니다. 이러한 타입의 감시 툴은 계산 비용도 더 많이 들므로 필요할 때만 사용해야 합니다.
베이스 툴
베이스 툴은 스크립터블 인터랙티브 툴 프레임워크(Scriptable Interactive Tool Framework)의 C++ 서브클래스로, 일반 사례를 처리하거나 입력 디바이스 처리 및 캡처 같은 추가 함수 기능을 노출하는 추가 내장 함수 기능을 제공합니다.
스크립터블 단일 클릭 툴
마우스 클릭 지원:
-
TestIfHitByClick: 마우스 클릭을 캡처하려면 히트 뎁스를 나타내는 유효한 FInputRayHit 를 반환해야 합니다.
-
OnHitByClick: 클릭 발생 시 마우스를 누를 때와 마우스를 놓을 때 모두 호출됩니다.
호버 지원:
-
OnHoverHitTest: 호버를 캡처하려면 히트 뎁스를 나타내는 유효한 FInputRayHit 를 반환해야 합니다.
-
OnHoverBegin: OnHoverHitTest 전달 후 호버 시퀀스가 시작되면 호출됩니다.
-
OnHoverUpdate: 호버 상태에서 커서가 움직일 때마다 호출됩니다.
-
OnHoverEnd: 호버가 종료되면 호출됩니다.
스크립터블 클릭 드래그 툴
마우스 드래그 지원:
-
TestIfCanBeginClickDrag: 드래그 시퀀스를 시작하려면 히트 뎁스를 나타내는 유효한 FInputRayHit를 반환해야 합니다.
-
OnDragBegin: TestIfCanBeginClickDrag 전달 후 드래그 시퀀스가 시작되면 호출됩니다.
-
OnDragUpdatePosition: 드래그 시퀀스 중 커서가 이동하면 호출됩니다.
-
OnDragEnd: 마우스를 놓아서 드래그 시퀀스가 종료되면 호출됩니다.
-
OnDragSequenceCancelled: Esc 키를 누르거나 창에서 포커스가 사라지는 등, 다양한 이유로 드래그 시퀀스가 종료되면 호출됩니다.
호버 지원:
-
OnHoverHitTest: 호버를 캡처하려면 히트 뎁스를 나타내는 유효한 FInputRayHit를 반환해야 합니다.
-
OnHoverBegin: OnHoverHitTest 전달 후 호버 시퀀스가 시작되면 호출됩니다.
-
OnHoverUpdate: 호버 상태에서 커서가 움직일 때마다 호출됩니다.
-
OnHoverEnd: 호버가 종료되면 호출됩니다.
에디터 전용 플러그인 활성화하기
에디터에서 사용하기 위해 ScriptabletoolsFramework 또는 ScriptabletoolsEditorMode만 필요한 uproject 및 uplugin 파일에 Editor 만 포함하도록 TargetAllowList 섹션을 환경설정합니다.
{
"Name": "ScriptabletoolsEditorMode",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
스크립터블 툴 생성
이 가이드에서는 클릭 시 툴의 UI에 노출되는 반경 프로퍼티로 레벨에 새 다이내믹 메시 스피어를 스폰하는 새 툴 블루프린트를 생성하는 방법에 대해 설명합니다.
플러그인 활성화하기
스크립터블 툴 에디터 모드를 사용하려면 관련 플러그인이 활성화되어야 합니다.
플러그인을 활성화하거나 이미 활성화되어 있는지 검증하려면 다음 단계를 따릅니다.
- 메뉴 바 에서 편집(Edit) > 플러그인(Plugins) 을 선택합니다.
-
검색창에 'scriptable tools' 를 입력합니다.
- 스크립터블 툴 에디터 모드(Scriptable Tools Editor Mode) 플러그인을 활성화하고 대화창이 표시되면 예(Yes) 를 선택합니다. 에디터 모드에서 자동으로 포함되므로 스크립터블 툴 프레임워크 모듈은 활성화하지 않아도 됩니다.
- 아래 단계의 몇 가지 함수도 지오메트리 스크립팅(Geometry Scripting) 플러그인이 있어야 사용할 수 있으므로 아직 활성화하지 않았다면 활성화합니다.
- 에디터를 재시작한 다음, 선택 모드(Selection Mode) 드롭다운에서 새 모드인 스크립터블 툴(Scriptable Tools) 모드로 전환합니다.
-
아래와 비슷하게 왼쪽에 빈 툴 팔레트가 있는 UI가 표시될 것입니다.
코어 구성
-
콘텐츠 브라우저(Content Browser) 에서 우클릭하고 팝업에서 에디터 유틸리티(Editor Utilities) 서브메뉴를 선택하고 새 에디터 유틸리티 블루프린트(Editor Utility Blueprint) 를 생성합니다. 검색창에 'Scriptable'을 입력하고 EditorScriptableSingleClicktool 을 선택합니다.
꼭 '에디터 유틸리티 블루프린트'를 사용해야 하는 것이 아니라면 일반 블루프린트 클래스 를 생성해도 됩니다. 그러나 에디터 툴을 생성하는 경우, 에디터 유틸리티 블루프린트 대신 블루프린트 클래스를 사용하면 EditorScriptabletool 내에서도 에디터 서브시스템 및 다양한 기타 에디터 전용 함수 기능에 액세스할 수 없습니다.
-
새 BP 에셋 이름을
tool_MakeSphere로 지정한 다음 우클릭 하고 편집(Edit) 을 선택하거나 에셋을 더블클릭 하여 블루프린트를 엽니다. BP 에디터 오른쪽에 있는 디테일(Details) 패널에서 툴 이름을 지정할 수 있는데, 이 예시에서는 'Sphere'라고 지정했습니다. 그리고 카테고리 이름도 스트링으로 채웁니다.
-
컴파일(Compile) (Ctrl + Alt) 후 저장(Save) (Ctrl + S)합니다. 스크립터블 툴 모드로 다시 전환합니다. 이제 Sphere 툴이 툴 팔레트에서 해당 카테고리 이름이 있는 섹션에 표시됩니다.
-
이제 Sphere 툴을 실행할 수 있습니다. 물론 아무 작업도 수행되지 않지만 툴을 시작할 수 있습니다. 뷰포트 하단 중앙에 있는 완료(Complete) 버튼을 사용하여 툴을 종료합니다.
-
BP 에디터로 돌아갑니다. 왼쪽 패널에서 함수(Functions) 섹션 끝에 마우스를 올립니다. 오버라이드(Override) 드롭다운이 표시됩니다. Test If Hit By Click 를 선택하여 마우스 히트 테스트를 위한 새 이벤트를 생성합니다. 드롭다운 목록의 함수는 구현할 수 있는 사용 가능한 툴 API 함수입니다.
-
아래와 같이 함수를 연결합니다.
-
On Hit By Click 이벤트에 대한 두 번째 오버라이드(Override) 를 추가합니다.
-
Event On Hit By Click 의 Click Pos 핀을 우클릭하고 구조체 핀 분할(Split Struct Pin) 을 선택합니다. 그런 다음 아래와 같이 클릭 이벤트를 연결합니다. 기본적으로 여기서는 Hit Test 이벤트와 똑같은 라인 트레이스를 반복한 다음, 히트 시 다이내믹 메시(Dynamic Mesh) 액터 를 스폰하고(여기서 노드가 처음에는 'Spawn actor from Class'이지만, 드롭다운에서 다이내믹 메시 액터를 선택하면 이름이 변경됨) 지오메트리 스크립팅을 사용하여 해당 액터의 메시를 스피어로 설정합니다.
BP 노드의 일부 핀을 우클릭하고 구조체 핀 분할(Split Struct Pin) 옵션을 사용하여 그래프를 단순화할 수 있습니다.
-
컴파일하고 메인 뷰포트로 돌아간 다음 Sphere 툴을 실행합니다. 뷰포트에서 클릭하면 클릭한 위치에 새 스피어가 배치됩니다.

반경 프로퍼티 추가
이제 툴의 베이스를 생성했습니다. 함수 기능을 확장하기 위해 스피어에 반경 세팅을 추가할 수 있습니다.
-
콘텐츠 브라우저로 돌아가서 우클릭하고 새 블루프린트 클래스(Blueprint Class) 를 생성하고 검색창에 'propertyset' 를 입력한 다음 ScriptableInteractivetoolPropertySet 를 선택합니다. 새 BP 에셋 이름을 지정(여기서는 'MakeSphere_Settings' 사용)한 다음 에셋을 열어 편집합니다.
-
왼쪽의 변수(Variables) 섹션에서 원 안의 +를 클릭하여 새 변수를 추가합니다. 변수 이름을 Radius 로 지정하고 타입을 Float 로 변경하고 눈 아이콘을 클릭하여 열린 눈으로 만들어 변수를 퍼블릭 으로 만듭니다. 변수가 퍼블릭이 아니면 디테일 패널에 표시되지 않습니다. 컴파일(Compile) (Ctrl + Alt) 후 저장(Save) (Ctrl + S)합니다.
-
오른쪽 패널에서 슬라이더 범위(Slider Range) 필드를 찾아 값을 10~200으로 설정한 다음, 디폴트 값(Default Value) 을 50으로 설정합니다. 다시 한 번 컴파일 합니다.
-
이제 툴 블루프린트를 반환하고 On Script Setup 함수에 대한 오버라이드 를 추가합니다.
-
Event On Script Setup 에서 Add Property Set Of Type 노드를 호출하고 타입 드롭다운에서 프로퍼티 세트 BP 클래스(위에서 사용한 것과 같은 이름인 MakeSphere_Settings)를 선택합니다.
-
프로퍼티 세트에 대한 변수를 생성합니다. 그러면 나중에 작업이 더 간단해집니다. Cast To
노드를 추가합니다. 여기서 에는 MakeSphere_Settings와 같은 BP 세팅 클래스 이름이 들어갑니다. -
As Make Sphere Settings 핀을 우클릭 하고 변수로 승격(Promote to Variable) 을 선택합니다. 그러면 자동으로 새 변수가 추가됩니다. 변수 이름을 'Settings'로 변경합니다.
-
On Hit By Click 이벤트의 그래프로 돌아가 Settings 변수의 퍼블릭 Radius 필드를 Append Sphere Box 노드의 Radius 핀에 연결한 다음, 컴파일 합니다.
-
뷰포트로 돌아가 다시 Sphere 툴을 실행합니다. 이제 디테일(Details) 패널에 Radius 필드에 대한 슬라이더가 표시될 것입니다. 이 값을 변경하면 배치된 스피어 크기가 변경됩니다.
블루프린트에서 커스텀 세팅이 있는 툴을 생성하고 마우스 클릭을 모두 처리했습니다.