ブループリントでアクタを検索する

ブループリントでアクタを検索するための操作ガイド

Windows
MacOS
Linux

このページでは、 Get All Actors of Class ノードを使ってレベル内でアクタを検索する方法を説明します。このノードは呼び出されると、特定のクラスのレベル内のすべてのアクタを取得して、それらを配列 (変数のコレクション) に配置します。その配列から、好みのフィルタ基準に合わせて全てのアクタまたは個別にアクタを取り出すことができます。アクタの種類および目的に合わせた方法で、アクタのプロパティにアクセスしたり修正することが可能になります。

クラスのアクタを全て取得する

この例では、Blueprint Third Person テンプレート (with Starter Content) を使用します。

  1. コンテンツ ブラウザ の「 Game/Blueprints 」フォルダから 3 つの Blueprint_Effect_Fire アセットをドラッグします。

    Actors1.png

    これらを好きな場所に置きます。検索を試すために置いてみます。

  2. コンテンツ ブラウザ の「 Game/Blueprints 」フォルダで MyCharacter アセットを開きます。

  3. Blueprint Editor ウィンドウ のグラフで、右クリック して F Key Event を 追加します。

    Actors2.png

    F を押すと、シーン内のアクタの検索が始まります。

  4. F Key Event の Pressed ピンを引き出して、 Get All Actors Of Class ノードを追加します。

    Actors3.png

    名前の通り、このノードは指定したクラスの全てのアクタを取得しようとします。

  5. Get All Actors of Class ノードで、 Actor Class ドロップダウンをクリックし、 Blueprint_Effect_Fire クラスを追加します。

    Actors4.png

  6. Out Actors を引き出して ForEachLoop ノードを追加します。

    Actors5.png

    Out Actors は (指定されたクラスの) すべてのアクタの 配列 で、その「それぞれに対して」何かをすることができます。

  7. ForEachLoop ノードの Array Element を引き出して P_FireFire Audio を追加します。

  8. グラフ内で 右クリック して Deactivate ノードを追加したら、 Fire と Audio のピンを Target に接続します。

    画像をクリックしてフルサイズで表示

    ここで、プレイヤーが F を押すと、レベル内の炎のエフェクトのすべてのインスタンスを取得し、それらを非アクティブにします。

  9. [Compile] ボタンをクリックし、ブループリントを終了し、 [Play] をクリックしてエディタで再生します。

F キーを押すと、レベル内に置いた全ての炎のインスタンスを非アクティブにすることができます。

この方法で、ある特定のクラスの全てのアクタを見つけ出して、何かしら影響を与えることができます。それでは、ある特定のクラスの全てのアクタを見つけ出して、さらにそのクラス内の特定のアクタ群またはアクタを見つけて、すべてのアクタではなく、それらのアクタだけ修正する場合はどうでしょうか?次のセクションでは、結果として得た配列にフィルタを適用して、全てではなく希望する対象だけを取得する方法を説明します。

特定のアクタを取得する

前のセクションで、 Get All Actors of Class ノードを使うと、指定したクラスのアクタの配列が作成されることを理解できたと思います。このセクションでは、様々な基準に合わせて得た配列結果にフィルタを適用して、その配列から特定の複数のアクタを取得、あるいはアクタを 1 つだけ取得する方法を紹介します。

まずひとつめは、アクタで タグ を使う方法です。

  1. 前のセクションのサンプルをそのまま使用して、レベル内の炎のエフェクトを 1 つ選択します。

  2. [Details] パネルの [Tags] セクションで、プラス記号をクリックしてアクタにタグを追加します。

    Actors8.png

  3. タグ用に「 Target 」などテキストを 0 フィールドに入力します。

    Actors9.png

  4. MyCharacter ブループリント内で、ForEachLoopArray Element ピンを引き出して Get Tags ノードを追加します。

    Actors10.png

  5. Tags ピンを引き出して Get ノードを追加します。

    Actors11.png

    ここで、 (上のプロセスで Target に設定した) Index 0 でタグを「Get」します。

  6. グラフ内を 右クリック して、 Branch ノードを追加します。

  7. BranchCondition を引き出して Actor Has Tag ノードを追加します。

  8. Get ノードの出力ピンを Actor Has Tag ノードの Tag ピンに接続します。

  9. ForEachLoop ピンの Array Element ピンを Actor Has Tag ノードの Target ピンに接続します。

    Actors12.png

  10. ForEachLoop ピンの Array Element ピンを引き出して P_FireFire Audio を取得して、Deactivate ノードへ接続します。

    画像をクリックしてフルサイズで表示

    指定されたクラスのすべてのアクタを収集し、それらを配列内に置き、それぞれのアクタに指定したタグが付いているか確認し、タグがついているアクタのみを非アクティブにするようにしました。

フィルタを適用する別の例です。

画像をクリックしてフルサイズで表示

上の例では、ブループリントの特定のクラスではなく Emitter クラスのすべてのアクタを取得しました (レベル内に、煙、炎、風、雨、霧など、複数のエミッタが存在し、これらを全部オフにしたい場合に使用できます)。Emitter オブジェクトに キャスティング を行ってから、 Emitter がアクティブかを確認し、アクティブな場合は非アクティブにします。

ForEachLoop の後のオブジェクトの場合は、すべてに キャスト する必要はありません。次の例を見てみましょう。

画像をクリックしてフルサイズで表示

クラス TriggerBox のレベル内のすべてのアクタを取得し、それらのコリジョンを無効にします (レベル内の全てのトリガーをオフにします)。アクセスするのは TriggerBox のコンポーネントではなく TriggerBox Actor そのものなので、 TriggerBox に対してキャストする 必要はありません。アクタで構成されるコンポーネントへアクセスしたい場合は、 Cast To ノードを使います。

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

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

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

フィードバックを送信