スクリプト アクション

コンテンツ ブラウザのアセット、またはレベルのアクタを右クリックで呼び出せるブループリント ユーティリティの作成方法について説明します。

Windows
MacOS
Linux

scripted-actions-banner.png

スクリプト アクション は、Unreal Editor で起動するブループリント ユーティリティで、 コンテンツ ブラウザ で 1 つ以上のアセットを右クリックするか、(上記のように) [Level Viewport (レベル ビューポート)] または [World Outliner (ワールド アウトライナー)] で 1 つ以上のアクタを右クリックして起動します。

このワークフローが特に有効なのは、特定のアセットまたはアクタのセットを状況に応じて把握するためのブループリント ツールが必要な場合です。 通常、スクリプト アクションは実行時に選択されているアセット、またはアクタのリストを取得し、そのオブジェクトを変更するか、グラフから別の方法で処理できるようにします。

このページでは、これらの種類のブループリント ユーティリティを作成して起動する方法と、特定の種類のアセットまたはアクタのみに適用するようにユーティリティをカスタマイズする方法について説明します。

前提条件: ブループリント ユーティリティ (略して ブルーティリティ) で説明されているように、まだ実験段階にあるブルーティリティの機能を有効にしておく必要があります。

ステップ

この手順では、スクリプト アクションをサポートする親クラスの 1 つから新しいブループリント クラスを作成し、そのクラスの新しいイベントグラフをスクリプト アクションとして表示します。

  1. コンテンツ ブラウザ 内で、新しい Blueprint utility クラスを作成するフォルダを右クリックし、コンテキスト メニューから [Blueprints]>[Blutility] を選択します。
    ブルーティリティの作成

  2. スクリプト アクションを、 コンテンツ ブラウザ で選択したアセット上で動作させるか、[Level Viewport] または [World Outliner] で選択したアクタ上で動作させるかを決定します。

    • スクリプト アクションでアセットを操作するには、親クラスとして [AssetActionUtility] を選択し、 [Select (選択)] を押します。

    • スクリプト アクションでアクタを操作するには、親クラスとして [ActorActionUtility] を選択し、 [Select (選択)] を押します。

    ActorActionUtility か AssetActionUtility を選択

  3. コンテンツ ブラウザ で新しいクラスにわかりやすい名前を付けます。
    新しいクラスに名前を付ける
    このクラス名は、スクリプト アクションを実行するときには表示されません。 後でスクリプト アクションを変更したり、新たに追加できるように、プロジェクトに別のブループリント クラスと分けておきます。

  4. 新しいクラスを右クリックして、コンテキスト メニューから [Edit Blueprint (ブループリントの編集)] を選択します。
    ブループリントの編集

  5. このクラスのスクリプト アクションを作成するには、新しい関数を作成するか、クラスのイベントグラフに新しい Custom Event ノードを作成します。

    Function Entry ノードまたは Custom Event ノードで、[Call In Editor] ボックスのチェックがオンになっていることを確認します。 これは新しい関数を作成するときに自動的に行われますが、カスタム イベントを使用する場合は自分で行う必要があります。

    たとえば、AssetActionUtility に対する新しい関数は、コンテンツ ブラウザで選択されているアセットのリストを繰り返し処理し、各アセットの名前を [Level Viewport] に表示します。

    以下の画像は、ActorActionUtility に実装された同様の機能を示しています。

    [Development (開発)]>[Editor] カテゴリには、スクリプト アクション用の便利なブループリント ノードがいくつかあり、上記の例のスクリプト アクションの実行時に選択されたオブジェクトのリストを返すノードが含まれています。 Get Selected Assets は、 コンテンツ ブラウザ で選択されたすべてのアセットへの参照の配列を返し、 Get Selection Set は、レベルで選択されているアクタの配列を返します。

  6. ブループリント クラスを [Save (保存)] して、[Compile] します。

最終結果

ブループリント クラスを保存してコンパイルすると、ブループリント クラスで選択した親クラスに応じて、アセットまたはアクタのいずれかのコンテキスト メニューに新しい スクリプト アクション サブメニューが表示されます。 このサブメニューには、ブループリント クラスで設定した各関数またはカスタム イベントが含まれます。

たとえば、 コンテンツ ブラウザ で 1 つ以上のアセットを右クリックすると、以下のようになります。

選択したアセットでスクリプト アクションを実行

または、 [Level Viewport][World Outliner] で 1 つ以上のアクタを右クリックすると、次のようになります。

選択したアクタでスクリプトアクションを実行

AssetActionUtility または ActorActionUtility クラスで設定した各関数とカスタム イベントは、コンテキスト メニューの個別のオプションとして使用可能になります。 1 つのブループリント クラス内で、必要な数のスクリプト アクションを作成できます。

アクションを特定のクラスに制限する

スクリプト アクションを実行する必要があるタスクによっては、特定の種類のオブジェクトに対してのみコンテキストメニューに表示した方が良い場合もあります。

たとえば、選択したアクタのマテリアルを変更するスクリプト アクションを作成するとします。 この場合、ユーザーが Static Mesh アクタを右クリックしたときにのみアクションを表示し、Light アクタまたはブループリントを右クリックしたときには表示しないようにすることができます。

AssetActionUtilityActorAssetUtility の両方の基本クラスは、GetSupportedClass というビルトイン関数を提供します。 いくつかのオブジェクトのクラスを選択したときに、コンテキスト メニューにブループリント クラスのスクリプト アクションを表示するかをこの関数で決めることができます。 ユーザーがアセットまたはアクタを右クリックするたびにこの関数が呼び出され、AssetActionUtility または ActorAssetUtility によってサポートされるクラス型を取得します。 クラス型を返す場合、その戻り値はユーザーが選択している一連のアセットまたはアクタと比較されます。 これらのアセットまたはアクタの少なくとも 1 つが、GetSupportedClass によって返されたクラスと一致するクラスを持つ場合、スクリプト アクションはコンテキスト メニューに表示されます。 デフォルトでは、GetSupportedClass 関数は何も返しません。 これにより、選択したアセットまたはアクタのクラスに関係なく、すべてのスクリプト アクションが表示されます。

このデフォルトの動作を変更したい場合は、クラスの GetSupportedClass 関数をオーバーライドして、特定のクラス型を返すように変更できます。

GetSupportedClass のオーバーライド

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

サポートされているクラスのスクリプト アクションが表示されます

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

スクリプト アクションは他のクラスには表示されません

複数のアセットまたはアクタを選択した場合は、選択したアイテムの 少なくとも 1 つ が、 GetSupportedClass で返されたクラスに一致する限り、スクリプト アクションはショートカット メニューに表示されます。 GetSupportedClass を指定してアクションが処理するクラスを制限しても、そのクラスのインスタンス だけ が実行時に選択されているという保証はありません。 ブループリント グラフを実装する際には、この点に留意してください。

動的入力

他の種類のエディタ ブループリント ユーティリティとは異なり、スクリプト アクションは入力を持つことができます。 Function Entry ノードまたは Custom Event ノードに 1 つ以上の入力を追加すると、エディタでスクリプト アクションを実行するたびに、その入力を指定するよう求められます。 これは、アクションを呼び出すたびにスクリプトに異なる追加情報が必要になる場合に便利です。

たとえば、この関数には、文字列、アクタ オブジェクトのリファレンス、マテリアル オブジェクトのリファレンスの 3 つの入力があります。

入力を持つ関数

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

入力値の設定

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

Select Skin
Light
Dark

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信