Language:
Page Info
Skill Level:
Engine Version:

ブループリントでタイマーを使用する

このページでは、ブループリントのゲームプレイ用の タイマー とタイマーに関連付いたノードの使用方法を説明します。

タイマーの作成とクリア

以下の手順で、ブループリントでタイマーを作成 / 設定します。

例えば Blueprint Third Person Template を使って、時間の経過に伴いプレイヤーに炎のダメージを与えていきます。

  1. プロジェクトで ThirdPersonCharacter ブループリントを開きます。

  2. グラフ内を 右クリック して、 PlayerInFirePlayerNotInFire と呼ばれるの 2 つの Custom Event を追加します。

    GHT6B_1.png

  3. [MyBlueprint] ウィンドウで、 FireDamage と呼ばれる新しい 関数 を追加します。

    GHT6B_2.png

    この関数は タイマー で時間の経過に伴い呼び出されて、ダメージを適用します。

  4. PlayerInFire Event を引き出して Set Timer by Function Name ノードを追加します。

  5. PlayerNotInFire Event を引き出して Clear Timer by Handle ノードを追加します。

  6. Set Timer by Function Name に対して、 Function NameFireDamage に設定します。

  7. Set Timer 上で Time0.75 に設定して、 [Looping] ボックスにチェックを入れます。

  8. Set Timer by Function Name ノードの Return Value ピンを Clear Timer by Handle ノードの Handle ピンに接続します。

    GHT6B_3.png

    ここに入力された Time は、 Function Name 関数が呼ばれる間隔 (1.75 秒ごと) です。

  9. PlayerHealth と呼ばれる Integer 変数を新規に作成し、 [Compile] をクリックし、 Default Value100 に設定します。

    GHT6B_4.png

  10. FireDamage 関数内で、 Alt キーを押しながら、 PlayerHealth 変数をグラフ内へドラッグします。

  11. Control を押しながら、 PlayerHealth 変数もドラッグします。

  12. PlayerHealth 変数をドラッグして、 Integer - Integer ノードを追加したら、 0 ピンを引き出して Random Integer in Range ノードを追加します。

    GHT6B_5.png

    ここでは Random Integer in Range ノードで値を Min (1) と Max (4) にしましたが、必要に応じてダメージ値を入力できます。

  13. Set ノードを引き出して Print String を追加し、 Control を押しながら PlayerHealth をドラッグして Print String に接続します。

    GHT6B_6.png

    この例ではヘルス値バーは表示してませんが、これにより実際ヘルス値が減少していることが分かります。

  14. 「Content/StarterContent/Blueprints」 フォルダにある Blueprint_Effect_Fire ブループリントを開きます。

  15. [Add Component] ボタンをクリックし、 Box 形状を追加し「 Trigger 」と名付けます。

    GHT6B_7.png

    プレイヤーがこのトリガーに出入りする時に、 ThirdPersonCharacter ブループリントにイベントを呼び出します。

  16. My Blueprint タブを探して [Trigger]右クリック し、 OnComponentBegin Overlap Event と OnComponentEnd Overlap Event を追加します。

    GHT6B_8.png

  17. それぞれの Other Actor ピンを引き出して Cast To ThirdPersonCharacter ノードを追加します。

  18. As Third Person Character C ピンを引き出して、 (Begin ノードの場合) PlayerInFire Event と PlayerIsNotInFire Event (End ノードの場合) を追加します。

    GHT6B_8b.png

  19. コンパイル保存 してから、ブループリントを終了します

  20. コンテンツ ブラウザBlueprint_Effect_Fire ブループリントをレベルへドラッグします。

    GHT6B_9.png

  21. [Play] ボタンをクリックしてエディタで再生し、火に入るとダメージを受け始めることが分かります。

これは、タイマーを使って時間経過に伴うダメージエフェクトを作成する方法のサンプルです。ただし、 X 秒継続してプレイヤーが無敵になったり、他の能力を持てるようにするパワーアップなど、他のことを表すためにタイマーを使うこともできます。

タイマー関連の追加ノード

Set Timer by Function Name ノードと Clear Timer by Handle ノードはタイマーの開始 / 停止に使用しますが、以下のノードを必要に応じて使うことができます。

Get Timer Elapsed と Get Timer Remaining

GHT6B_10.png

Get Timer Elapsed by Handle ノードと Get Timer Remaining by Handle ノードは開始からの経過時間や、指定したタイマーに対する残り時間 (FunctionName により表示) を取得します。Float として値を返し、時間の経過に伴いエフェクトを変更したり、エフェクトが終了しそうなときにメッセージを出すなど、様々な目的で使用することができます。

Pause Timer と Un Pause Timer

GHT6B_11.png

Pause Timer by Handle は名前の通り、現在時刻でタイマーを一時停止します。一方、 Clear Timer by Handle は完全にタイマー停止しリセットします。Unpause Timer by Handle ノードは一時停止しているタイマーを再開するために使用し、停止した場所から始めます。ユースケースの例としては、タイマーで実行するエフェクトがプレイヤーに適用されていて、例えばメニューやインベントリ画面に入り、エフェクトを一時停止した後、ゲームプレイに戻った時に再開させるというものがあります。

Timer Exists 、Is Timer Active 、Is Timer Paused

GHT6B_12.png

Does Timer Exist by HandleIs Timer Active by HandleIs Timer Paused by Handle ノードはすべて True あるいは False の値を返し、タイマーが存在しているのか、タイマーはアクティブな状態なのか、タイマーは一時停止中なのかを判断するために使用します。

Set Timer by Event

GHT6B_13.png

Set Timer by Event ノードは Set Timer by Function Name ノードと同様に機能しますが、違う点は Function Name を指定する代わりに、発行する Custom Event を接続できることです。Set Timer by Function Name ノードの場合と同様に、これもループに設定することもできます。