スクリプト アクション は、ユーザーが Unreal Editor で起動する Editor Utility ブループリントです。起動するには、コンテンツ ブラウザ で複数のアセットを右クリックするか、上図のように wport (レベル ビューポート)] または [World Outliner (アウトライナ)[Level Vie] で複数のアクタを右クリックします。
このワークフローが特に役立つのは、アセットまたはアクタの特定のセットに関してコンテキストに応じた対応をさせるためのブループリント ロジックが必要な場合です。通常、スクリプト アクションは実行時に選択されているアセットまたはアクタのリストを取得して、それらのオブジェクトを変更したり、その他の方法でグラフにそれらのオブジェクトを取り入れます。
このページでは、このような Editor Utility ブループリントを作成して起動する方法と、特定の種類のアセットまたはアクタのみに適用するように Editor Utility ブループリントをカスタマイズする方法について説明します。
ステップ
この手順では、スクリプト アクションをサポートする親クラスの 1 つから新しい Editor Utility Blueprint クラスを作成し、そのクラスの新しいイベント グラフをスクリプト アクションとして表示します。
-
コンテンツ ブラウザ 内で新しいクラスを作成するフォルダを右クリックして、コンテキスト メニューから [Editor Utilities (エディタ ユーティリティ)] > [Editor Utility Blueprint (エディタ ユーティリティ ブループリント)] を選択します。
-
スクリプト アクションを、コンテンツ ブラウザ で選択したアセット上で動作させるか、[Level Viewport (レベル ビューポート)] または [World Outliner (アウトライナ)] で選択したアクタ上で動作させるかを決定します。
-
スクリプト アクションでアセットを操作するには、親クラスとして [AssetActionUtility] を選択して、[Select (選択)] を押します。
-
スクリプト アクションでアクタを操作するには、親クラスとして [ActorActionUtility] を選択して、[Select (選択)] を押します。
-
- コンテンツ ブラウザ で新しいクラスにわかりやすい名前を付けます。
このクラス名は、スクリプト アクションを実行するときには表示されません。後でスクリプト アクションを変更したり、新しいスクリプト アクションを追加する必要がある場合に、プロジェクトで他のブループリント クラスとこのクラスを分ける必要があるからです。
-
新しいクラスをダブルクリックしてブループリント エディタで開きます。
- このクラスのスクリプト アクションを作成するには、新しい関数を作成するか、クラスのイベント グラフで新しい Custom Event ノードを作成します。
Function Entry ノードまたは Custom Event ノードで、[Call in Editor (エディタで呼び出す)] チェックボックスがオンになっていることを確認します。新しい関数を作成するとこのチェックボックスは自動的にがオンになっていますが、カスタム イベントを使用する場合は手動でオンにする必要があります。
たとえば、AssetActionUtility に対する新しい関数は、コンテンツ ブラウザで選択されているアセットのリストを繰り返し処理し、各アセットの名前を [Level Viewport (レベル ビューポート)] に表示します。
以下の画像は、ActorActionUtility に実装された同様の関数を示しています。
[Development (開発)] > [Editor] カテゴリには、スクリプト アクション用の便利なブループリント ノードがいくつかあり、上記の例のスクリプト アクションの実行時に選択されたオブジェクトのリストを返すノードが含まれています。Get Selected Assets は、コンテンツ ブラウザ で選択されたすべてのアセットへの参照の配列を返し、Get Selection Set は、レベルで現在選択されているアクタの配列を返します。
また、まだインストールしていない場合は、アセットおよびレベル アクタを操作するその他の関数ライブラリにアクセスするため、Editor Scripting Utilities プラグインをインストールしてください。「エディタのスクリプティングと自動化」 を参照してください。
- ブループリント クラスを [Save (保存)] して、[Compile (コンパイル)] します。
最終結果
ブループリント クラスを保存してコンパイルしたら、ブループリント クラスで選択した親クラスに応じて、アセットまたはアクタのいずれかのコンテキスト メニューに新しい [Scripted Actions (スクリプト アクション)] サブメニューが表示されます。このサブメニューには、ブループリント クラスで設定した各関数またはカスタム イベントが含まれます。
たとえば、コンテンツ ブラウザ で 1 つ以上のアセットを右クリックすると、以下のようになります。

または、[Level Viewport (レベル ビューポート)] か [World Outliner (アウトライナ)] で 1 つ以上のアクタを右クリックすると、次のようになります。

AssetActionUtility クラスまたは ActorActionUtility クラスで設定した各関数とカスタム イベントは、コンテキスト メニューの個別のオプションとして使用可能になります。1 つのブループリント クラスで、必要な数のスクリプト アクションを作成できます。または、複数のブループリント クラスを作成して、それらのクラス全体にスクリプト アクションを配布できます。
アクションを特定のクラスに制限する
スクリプト アクションを実行する必要のある作業によっては、特定の種類のオブジェクトに対してのみコンテキスト メニューに表示した方が良い場合もあります。
たとえば、選択したアクタのマテリアルを変更するスクリプト アクションを作成するとします。この場合、ユーザーが Static Mesh アクタを右クリックしたときにのみアクションを表示し、Light アクタまたはブループリントを右クリックしたときには表示しないようにすることができます。
AssetActionUtility と ActorAssetUtility の両方の基本クラスは、GetSupportedClass という組み込み関数を提供します。 この関数では、複数のオブジェクトのクラスを選択したときに、コンテキスト メニューにブループリント クラスのスクリプト アクションを表示するかを決定します。ユーザーがアセットまたはアクタを右クリックするたびにこの関数が呼び出され、AssetActionUtility クラスまたは ActorAssetUtility クラスによってサポートされるクラスの型を取得します。クラスの型を返す場合、その戻り値はユーザーが現在選択している一連のアセットまたはアクタと比較されます。これらのアセットまたはアクタの少なくとも 1 つが、GetSupportedClass によって返されたクラスと一致するクラスを持つ場合、スクリプト アクションはコンテキスト メニューに表示されます。デフォルトでは、GetSupportedClass 関数は何も返しません。これにより、選択したアセットまたはアクタのクラスに関係なく、すべてのスクリプト アクションが表示されます。
このデフォルトのビヘイビアを変更したい場合は、クラスの GetSupportedClass 関数をオーバーライドして、特定のクラスの型を返すように変更できます。

たとえば、ActorAssetUtility 内のこの実装では、StaticMeshActor クラスを返します。

この実装では、ユーザーが Static Mesh アクタを 1 つ以上選択した状態でコンテキスト メニューを開いたときに、このクラスのスクリプト アクションが表示されます。

ただし、他の種類のアクタのみを選択している場合、スクリプト アクションは表示されません。

複数のアセットまたはアクタを選択した場合は、選択したアイテムの 少なくとも 1 つ が、GetSupportedClass で返されたクラスに一致する限り、スクリプト アクションはショートカット メニューに表示されます。GetSupportedClass をオーバーライドしてアクションが処理するクラスを制限しても、そのクラスのインスタンス のみ がアクションの実行時に選択されることは保証はありません。ブループリント グラフを実装する際には、この点に留意してください。
動的入力
スクリプト アクションを起動したユーザーから情報を要求できるように、スクリプト アクションを設定できます。Function Entry ノードまたは Custom Event ノードに 1 つ以上の 入力 を追加すると、エディタでスクリプト アクションを実行するたびに、その入力を指定するよう求められます。これは、アクションを呼び出すたびにスクリプトに異なる追加情報が必要になる場合に役立ちます。
たとえば、この関数には、文字列、アクタ オブジェクトのリファレンス、マテリアル オブジェクトのリファレンスの 3 つの入力があります。

この関数にスクリプト アクションを実行すると、エディタに小さなウィンドウが表示され、以下の入力値を設定できます。

エディタは、各入力が想定されている値の型と一致するかどうかを検証します。ただし、その入力が有効な値を持つか、当該の値が特定のコンテキストで合理的であるかは保証されません。そのため、未指定の入力値を処理し、ユーザー指定の入力値の検証を行うスクリプトが必要であることに留意してください。