Language:
Page Info
Skill Level:
Engine Version:

ブループリントでアクタをスポーン、破棄する

制作しているゲームの種類に関係なく、当初レベルに配置されていなかったものをランタイムに登場させたいことがあるでしょう。 ワールドにオブジェクトをスポーンさせるという概念は、 ブループリント ビジュアル スクリプティング を使って実現できます。また、ゲームプレイ中にスポーンされた (またはスポーンされていなかった) オブジェクトを破棄すなわちデスポーンさせる機能も実現できます。

このガイドでは、ボタンが押されると アクタ をスポーンし、キャラクターにアタッチし、再度ボタンが押されると 変数 参照を使用して破棄します。

HeroImage.png

ステップ

ここでは Starter Content Enabled (スターター コンテンツを有効にした状態)Blueprint Third Person Template を使います。

  1. メイン ツールバー[ブループリント] ボタンをクリックして、次に [Open Level Blueprint (Level ブループリントを開く)] を選択します。

    SpawnDestroy_01.png

    Level ブループリント は、各レベルで固有であり、レベル全体のグローバル グラフとしての役割を果たす、特別なタイプのブループリントです。

  2. グラフ内を右クリックして、 Spawn Actor from Class ノードを探して追加します。

    SpawnDestroy_02.png

    これでスポーンするクラス (またはオブジェクトの種類) を指定することでスポーンするものを定義することができます。

  3. SpawnActor ノードの Class セクションで Blueprint_Effect_Fire クラスを選択します。

    SpawnDestroy_03.png

    これはプロジェクト作成時に有効にした Starter Content パックの一部として作成された Blueprint クラスです。

  4. グラフ内で右クリックして、Enter Keyboard Event を探して追加します。

    SpawnDestroy_04.png

    これは、炎のエフェクトをスポーンし、破棄するキーになります。

  5. 再びグラフ内で右クリックして、 Flip Flop ノードを検索して追加します。

    SpawnDestroy_05.png

    このノードはスイッチとして機能します。1 回めは A ピンを実行し、2 回めは B ピンを実行します。 B ピンを実行したら、その次は再度 A ピンを実行し、A ピンと B ピンとの間で切り替わります。

  6. F ノードの Pressed ピンから左クリックしてドラッグし、それを Flip Flop ノードと Spawn Actor ノードに接続します。

    SpawnDestroy_06.png

    これで Spawn Actor ノードへの呼び出しを実行し (F が押された場合)、Fire エフェクトをスポーンすることができます。

  7. グラフ内で右クリックして、Destroy Actor ノードを探して追加します。

    SpawnDestroy_07.png

    このノードで、指定するどのアクタでも破棄することができます。

  8. Flip Flop ノードの B ピンを Destroy Actor ノードに接続します。

    SpawnDestroy_08.png

    F キーを 2 回めに押すと、Flip Flop ノードの B ピンが呼び出されて Destroy Actor ノードを実行します。 この Destroy アクタには、Target 入力ピンがあり、何を破棄するかをノードに指示します。 デフォルトでこれは Self に設定されており、この場合は null ポインタです。Level ブループリントを破棄できないため、何を破棄するかが不明であることを表します。 この Destroy Actor ノードが Character ブループリント内にあり、Self をターゲットにするように指示したら、キャラクターが破棄されます。

    この場合、Destroy Actor ノードに対して何を破棄するかを指示する必要があります (ブループリントの Fire エフェクト)。 これを行うには、スポーンするブループリントの Fire エフェクトへの参照を作成する必要があります。

  9. Spawn Actor ノードの Return Value 上で右クリックして、[Promote to variable] を選択します。

    SpawnDestroy_09.png

    この場合の Return Value は、「スポーンするもの」であり、後で破棄できるように参照を保存するものです。

  10. この変数の [Details] パネルで、CurrentFlames 等の名前を付けます。

    SpawnDestroy_10.png

  11. MyBlueprint パネルの Variables で、Ctrl キーを押しながら CurrentFlames 変数をグラフにドラッグ&ドロップし、それを Destroy ActorTarget に接続します。

    SpawnDestroy_11.png

    これで Destroy Actor ノードに対して変数の参照を作成したブループリントの Fire エフェクトを対象にするように指示しています。

  12. グラフ内で右クリックし、 Get Player Character ノードを検索して追加します。

    SpawnDestroy_12.png

    これにより、指定したプレイヤー キャラクターを見つけて、そのキャラクターにアクセスして情報を取得することができます。

  13. Get Player CharacterReturn Value から、Get Actor Transform ノードを探して追加します。

    SpawnDestroy_13.png

    これでプレイヤー キャラクターの LocationRotationScale がわかり、これを使ってブループリントの Fire エフェクトのスポーン位置を定義します。

  14. Get Actor TransformReturn ValueSpawn Actor ノードの Spawn Transform に接続します。

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

    この時点でグラフはほぼ完成し、F キーを押すと、プレイヤーの位置でブループリントの Fire をスポーンし、それを変数として格納するように指示しました。 F を 2 回めに押すと、作成した変数を破棄します (Fire エフェクトをキルします)。最後に、Fire エフェクトをプレイヤーにアタッチします。 Fire エフェクトをスポーンすると、プレイヤーの位置にスポーンされますが、プレイヤーが炎の周囲を動くと、スポーンした位置にとどまります。

  15. Set ノードの参照ピンを左クリックしてドラッグして、AttachToActor ノードを探して追加します。

    SpawnDestroy_15.png

    このノードを使って炎のエフェクトを他のアクタにアタッチすることもできます。この場合、プレイヤー キャラクターにアタッチします。

  16. Get Player Character ノードを使って以下のようにアタッチして、Location RuleRotation RuleSnape to Target に設定します。

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

    ここでは、炎のエフェクトに対する参照の変数をプレイヤー キャラクターにアタッチし、その位置と回転をプレイヤー キャラクターに合うようにスナップします。

  17. [コンパイル] ボタンをクリックし、ブループリントをコンパイルします。

    SpawnDestroy_17.png

  18. メインのレベル エディタ ウィンドウに戻り、[メインツールバー] から、[Play] ボタンをクリックしてエディタ内でプレイします。

    SpawnDestroy_18.png

最終結果

エディタで再生中に、F キーを押すと炎のエフェクトをスポーンし、プレイヤー キャラクターにアタッチされます。 炎がプレイヤーにアタッチされている状態で、F キーを押すとエフェクトを破棄して、再度 F キーを押してそれをリスポーンすることができます。

他の方法としては、ブループリントの炎のエフェクト内のパーティクルエフェクトを アクティベート および 非アクティベート にするやり方があります。

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

上の例では、ゲーム開始時に Event BeginPlay ノードを使って Blueprint Fire をスポーンして、それをプレイヤー キャラクターにアタッチします。 パーティクル エフェクトも非アクティベートにして、ゲーム開始時に関連するサウンドをフェードアウトします。 F を押すと、ブループリントの Fire エフェクトが既にスポーンされているため (アクティベートはされていません)、代わりにそれをアクティベートして、オーディオをフェードインします。 F を 2 回めに押すと、エフェクトを破棄する代わりに、それを非アクティブにして関連サウンドをフェードアウトさせます。