스크립팅된 액션(Scripted Actions) 은 언리얼 에디터 에서 실행할 수 있는 에디터 유틸리티 블루프린트 입니다. 콘텐츠 브라우저(Content Browser) 에서 에셋을 우클릭하거나 레벨 뷰포트(Level Viewport) (상단 참조) 또는 월드 아웃라이너(World Outliner) 의 액터를 우클릭하여 실행합니다.
이 워크플로는 특정 에셋 또는 액터 세트에 대하여 컨텍스트에 따라 다르게 작동하는 블루프린트 로직이 필요할 때 특히 유용합니다. 일반적으로 스크립팅된 액션 은 액션 실행 당시 선택된 에셋 또는 액터의 목록을 가져온 다음 해당 오브젝트를 수정하거나 그래프에서 다른 방식으로 처리합니다.
이 페이지의 지침에서는 이런 종류의 에디터 유틸리티 블루프린트를 생성하고 실행하는 방법과 특정 타입의 에셋이나 액터에만 적용되도록 커스터마이징하는 방법을 설명합니다.
단계
다음 절차를 통해 스크립팅된 액션(Scripted Actions)을 지원하는 부모 클래스 중 하나로부터 새로운 에디터 유틸리티 블루프린트 클래스를 생성하고, 해당 클래스에 대한 이벤트 그래프를 새로 구성하여 스크립팅된 액션으로 표시되도록 하겠습니다.
-
콘텐츠 브라우저(Content Browser) 에서 새 클래스를 생성할 폴더를 우클릭한 후 컨텍스트 메뉴에서 에디터 유틸리티(Editor Utilities) > 에디터 유틸리티 블루프린트(Editor Utility Blueprint) 를 선택합니다.
-
스크립팅된 액션(Scripted Actions)이 콘텐츠 브라우저(Content Browser) 에서 선택한 에셋에서 작동하게 할지, 아니면 레벨 뷰포트(Level Viewport) 나 월드 아웃라이너(World Outliner) 에서 선택한 액터에 작동하게 할지 결정합니다.
-
스크립팅된 액션이 에셋에서 작동하게 하려면 AssetActionUtility 를 부모 클래스로 선택하고 선택(Select) 을 누릅니다.
-
스크립팅된 액션이 액터에서 작동하게 하려면 ActorActionUtility 를 부모 클래스로 선택하고 선택(Select) 을 누릅니다.
-
-
콘텐츠 브라우저(Content Browser) 에서 새 클래스를 설명하는 이름을 짓습니다.
스크립팅된 액션을 실행할 때 이 클래스 이름이 보이지는 않습니다. 이 이름은 스크립팅된 액션(Scripted Actions)을 수정하거나 나중에 새로운 액션을 추가할 때 프로젝트 내에서 이 클래스를 다른 블루프린트 클래스와 구별하기 위해서만 사용합니다.
-
새 클래스를 더블 클릭하여 블루프린트 에디터에서 엽니다.
-
이 클래스에 스크립팅된 액션을 생성하려면 새 함수를 생성하거나, 이 클래스의 이벤트 그래프에서 커스텀 이벤트(Custom Event) 노드를 새로 생성합니다.
함수 엔트리 노드 또는 커스텀 이벤트 노드에서는 에디터에서 호출(Call In Editor) 박스에 체크해야 합니다. 새 함수를 만들 때는 자동으로 체크되지만, 커스텀 이벤트를 사용한다면 직접 체크해야 합니다.
예를 들어 AssetActionUtility 의 이 새 함수는 콘텐츠 브라우저(Content Browser)에서 선택된 액션 목록을 반복작업하고 레벨 뷰포트(Level Viewport) 에 각각의 이름을 출력합니다.
아래 이미지는 ActorActionUtility 에 비슷한 함수가 구현된 모습입니다.
개발(Development) > 에디터(Editor) 카테고리에 스크립팅된 액션(Scripted Actions)에 사용하기에 유용한 블루프린트 노드들이 있습니다. 예시의 노드들은 스크립팅된 액션이 실행될 때 선택된 오브젝트 목록을 반환합니다. Get Selected Assets 는 콘텐츠 브라우저(Content Browser) 에서 선택된 모든 에셋에 대한 참조 배열을 반환하고, Get Selection Set 는 레벨에서 현재 선택된 액터 배열을 반환합니다.
에디터 스크립팅 유틸리티(Editor Scripting Utilities) 플러그인을 아직 설치하지 않았다면 새로 설치하여 에셋 및 레벨 액터 작업을 할 때 사용하는 추가적인 함수 라이브러리에 접근할 수 있도록 합니다. 에디터 자동화 및 스크립트 작성을 참고하세요.
-
블루프린트 클래스를 저장(Save) 하고 컴파일(Compile) 합니다.
최종 결과물
블루프린트 클래스를 저장하고 컴파일하면, 선택한 부모 클래스에 따라 에셋이나 액터의 컨텍스트 메뉴에 스크립팅된 액션(Scripted Actions) 서브 메뉴가 새로 나타납니다. 이 서브 메뉴에는 블루프린트 클래스에서 구성한 각 함수 또는 커스텀 이벤트가 들어 있습니다.
예를 들어 콘텐츠 브라우저(Content Browser) 에서 하나 이상의 에셋을 우클릭하면 다음과 같이 표시됩니다.

아니면 레벨 뷰포트(Level Viewport) 또는 월드 아웃라이너(World Outliner) 에서 하나 이상의 액터를 우클릭할 때 같은 메뉴가 표시됩니다.

AssetActionUtility 또는 ActorActionUtility 클래스에 구성한 각 함수와 커스텀 이벤트는 컨텍스트 메뉴에 별도의 옵션으로 나타납니다. 단일 블루프린트 클래스에 스크립팅된 액션을 여럿 생성할 수도 있고, 여러 블루프린트 클래스를 생성하여 스크립팅된 액션을 분배할 수도 있습니다.
액션을 특정 클래스로 제한
스크립팅된 액션으로 수행할 작업에 따라서는 특정 오브젝트 타입의 컨텍스트 메뉴에만 나타나게 해야 할 수도 있습니다.
예를 들어 선택한 액터의 머티리얼을 변경하는 스크립팅된 액션을 생성했다고 합시다. 이런 경우 해당 액션은 사용자가 스태틱 메시 액터를 우클릭한 경우에만 나타나고, 라이트 액터나 블루프린트를 우클릭한 경우에는 나타나지 않는 것이 좋을 수 있습니다.
AssetActionUtility 와 ActorAssetUtility 베이스 클래스는 둘 다 GetSupportedClass 라는 내장 함수를 제공합니다. 이 함수는 블루프린트 클래스의 스크립팅된 액션이 컨텍스트 메뉴에 나타나게 하기 위해 선택되어야 하는 오브젝트의 클래스를 결정합니다. 사용자가 에셋 또는 액터 세트를 우클릭할 때마다 이 함수가 호출되어 AssetActionUtility 또는 ActorAssetUtility 클래스가 지원하는 클래스 타입을 구합니다. 클래스 타입을 반환하면, 반환 값은 사용자가 현재 선택한 에셋 또는 액터 세트와 비교됩니다. 에셋이나 액터에 GetSupportedClass 에 의해 반환된 클래스와 일치하는 클래스가 있으면 스크립팅된 액션이 컨텍스트 메뉴에 나타납니다. 기본적으로 GetSupportedClass 함수는 아무것도 반환하지 않습니다. 그러면 선택한 에셋이나 액터의 클래스와 상관없이 모든 스크립팅된 액션이 나타납니다.
이 디폴트 행동을 변경하려면, 클래스 내 GetSupportedClass 함수를 오버라이드하여 특정한 타입의 클래스를 반환하도록 하면 됩니다.

예를 들어 ActorAssetUtility 내의 이 구현은 StaticMeshActor 클래스를 반환합니다.

이 구현에서는 사용자가 스태틱 메시 액터를 하나라도 선택한 상태에서 컨텍스트 메뉴를 열어야 스태틱 메시 클래스의 스크립팅된 액션이 나타납니다.

다른 종류의 액터만 선택한 상태로는 스크립팅된 액션이 나타나지 않습니다.

여러 에셋이나 액터를 선택한 경우에도 나타나는 기준은 까다롭지 않습니다. 선택한 항목 중 하나라도 GetSupportedClass 가 반환한 클래스와 일치하는 것이 있으면 컨텍스트 메뉴에 스크립팅된 액션이 나타납니다. GetSupportedClass 를 오버라이드하여 액션으로 처리할 클래스를 제한한다고 해도, 액션이 실행될 때 선택한 클래스가 오직 해당 클래스뿐이리라는 보장은 없습니다. 블루프린트 그래프를 구현할 때는 이 점에 유의하세요.
다이내믹 입력
스크립팅된 액션(Scripted Actions)이 호출하는 사용자에게 정보를 요구하도록 설정할 수 있습니다. 함수 엔트리 노드 또는 커스텀 이벤트(Custom Event) 노드에 하나 이상의 입력(Inputs) 을 추가하는 경우, 에디터에서 스크립팅된 액션을 실행할 때마다 해당 입력을 제공하라는 메시지가 표시됩니다. 액션을 호출할 때마다 스크립트에 필요한 추가 정보가 달라질 수 있는 경우에 유용합니다.
예를 들어 이 함수에는 바로 스트링, 액터 오브젝트 레퍼런스, 머티리얼 오브젝트 레퍼런스의 세 가지 입력이 있습니다.

이 함수에 스크립팅된 액션을 실행하면 그러한 입력값을 설정하는 작은 팝업 창이 에디터에 표시됩니다.

에디터는 값이 입력될 때마다 예상되는 값 타입에 맞는지 유효성을 검사합니다. 그렇다고 해서 해당 입력이 반드시 값을 가진다거나 그 값들이 특정 컨텍스트에 맞을 것이라는 보장은 없습니다. 스크립트가 지정되지 않은 입력값을 처리하고 사용자가 제공하는 입력값의 유효성을 검사해야 합니다.