Scripted Actions (スクリプト化されたアクション) は、ユーザーが Unreal Editor で起動する Editor Utility ブループリント です。起動するには、コンテンツ ブラウザ で複数のアセットを右クリックするか、上図のように [Level Viewport (レベル ビューポート)] または [World Outliner (アウトライナ) で複数のアクタを右クリックします。
このワークフローが特に役立つのは、アセット または アクタ の特定のセットに関してコンテキストに応じた対応をさせるためのブループリント ロジックが必要な場合です。通常、スクリプト化されたアクション は実行時に選択されているアセットまたはアクタのリストを取得して、それらのオブジェクトを変更したり、その他の方法でグラフにそれらのオブジェクトを取り入れます。
このページでは、このような 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 プラグインをインストールしてください。「エディタのスクリプティングと自動化」を参照してください。
6.ブループリント クラスを [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 つの入力があります。
この関数にスクリプト化されたアクションを実行すると、エディタに小さなウィンドウが表示され、以下の入力値を設定できます。
エディタは、各入力が想定されている値の型と一致するかどうかを検証します。ただし、その入力が有効な値を持つか、当該の値が特定のコンテキストで合理的であるかは保証されません。そのため、未指定の入力値を処理し、ユーザー指定の入力値の検証を行うスクリプトが必要であることに留意してください。