Choose your operating system:
Windows
macOS
Linux
Unreal Engine 4 の タイマー は、指定した間隔で 1 度 (または繰り返し) のアクションを実行することができる便利なツールです。タイマーは、アクションを遅らせたり、所定の期間に渡ってアクションを発生させる際に使用します。プレイヤーがあるアイテムを取得したその 10 秒後に、無敵キャラクターとなる例が挙げられます。あるいは、火の中に立っているプレイヤーに対して 1 秒ごとにダメージを与える場合もあります。タイマーを使って、これらのシナリオを実現することができます。
設定セクションの下の方にあるリンクで、ブループリントを使用したタイマーの使用例 を紹介しています。
実装ガイド
このガイドでは、ブループリントのゲームプレイ用の タイマー とタイマーに関連付いたノードの使用方法を説明します。
タイマーの作成とクリア
以下の手順で、ブループリントでタイマーを作成 / 設定します。
例えば Blueprint Third Person Template を使って、時間の経過に伴いプレイヤーに炎のダメージを与えていきます。
-
プロジェクトで ThirdPersonCharacter ブループリントを開きます。
-
グラフ内を 右クリック して、 PlayerInFire と PlayerNotInFire と呼ばれるの 2 つの Custom Event を追加します。
-
[MyBlueprint] ウィンドウで、 FireDamage と呼ばれる新しい 関数 を追加します。
この関数は タイマー で時間の経過に伴い呼び出されて、ダメージを適用します。
-
PlayerInFire Event を引き出して Set Timer by Function Name ノードを追加します。
-
PlayerNotInFire Event を引き出して Clear Timer by Handle ノードを追加します。
-
Set Timer by Function Name に対して、 Function Name を FireDamage に設定します。
-
Set Timer 上で Time を 0.75 に設定して、 [Looping] ボックスにチェックを入れます。
-
Set Timer by Function Name ノードの Return Value ピンを Clear Timer by Handle ノードの Handle ピンに接続します。
ここに入力された Time は、 Function Name 関数が呼ばれる間隔 (1.75 秒ごと) です。
-
PlayerHealth と呼ばれる Integer 変数を新規に作成し、 [Compile] をクリックし、 Default Value を 100 に設定します。
-
FireDamage 関数内で、 Alt キーを押しながら、 PlayerHealth 変数をグラフ内へドラッグします。
-
Control を押しながら、 PlayerHealth 変数もドラッグします。
-
PlayerHealth 変数をドラッグして、 Integer - Integer ノードを追加したら、 0 ピンを引き出して Random Integer in Range ノードを追加します。
ここでは Random Integer in Range ノードで値を Min (1) と Max (4) にしましたが、必要に応じてダメージ値を入力できます。
-
Set ノードを引き出して Print String を追加し、 Control を押しながら PlayerHealth をドラッグして Print String に接続します。
この例ではヘルス値バーは表示してませんが、これにより実際ヘルス値が減少していることが分かります。
-
「Content/StarterContent/Blueprints」 フォルダにある Blueprint_Effect_Fire ブループリントを開きます。
-
[Add Component] ボタンをクリックし、 Box 形状を追加し「 Trigger 」と名付けます。
プレイヤーがこのトリガーに出入りする時に、 ThirdPersonCharacter ブループリントにイベントを呼び出します。
-
My Blueprint タブを探して [Trigger] を 右クリック し、 OnComponentBegin Overlap Event と OnComponentEnd Overlap Event を追加します。
-
それぞれの Other Actor ピンを引き出して Cast To ThirdPersonCharacter ノードを追加します。
-
As Third Person Character C ピンを引き出して、 (Begin ノードの場合) PlayerInFire Event と PlayerIsNotInFire Event (End ノードの場合) を追加します。
-
コンパイル し 保存 してから、ブループリントを終了します
-
コンテンツ ブラウザ で Blueprint_Effect_Fire ブループリントをレベルへドラッグします。
-
[Play] ボタンをクリックしてエディタで再生し、火に入るとダメージを受け始めることが分かります。
これは、タイマーを使って時間経過に伴うダメージエフェクトを作成する方法のサンプルです。ただし、 X 秒継続してプレイヤーが無敵になったり、他の能力を持てるようにするパワーアップなど、他のことを表すためにタイマーを使うこともできます。
タイマー関連の追加ノード
Set Timer by Function Name ノードと Clear Timer by Handle ノードはタイマーの開始 / 停止に使用しますが、以下のノードを必要に応じて使うことができます。
Get Timer Elapsed と Get Timer Remaining
Get Timer Elapsed by Handle ノードと Get Timer Remaining by Handle ノードは開始からの経過時間や、指定したタイマーに対する残り時間 (FunctionName により表示) を取得します。Float として値を返し、時間の経過に伴いエフェクトを変更したり、エフェクトが終了しそうなときにメッセージを出すなど、様々な目的で使用することができます。
Pause Timer と Un Pause Timer
Pause Timer by Handle は名前の通り、現在時刻でタイマーを一時停止します。一方、 Clear Timer by Handle は完全にタイマー停止しリセットします。 Unpause Timer by Handle ノードは一時停止しているタイマーを再開するために使用し、停止した場所から始めます。ユースケースの例としては、タイマーで実行するエフェクトがプレイヤーに適用されていて、例えばメニューやインベントリ画面に入り、エフェクトを一時停止した後、ゲームプレイに戻った時に再開させるというものがあります。
Timer Exists 、Is Timer Active 、Is Timer Paused
Does Timer Exist by Handle 、 Is Timer Active by Handle 、 Is Timer Paused by Handle ノードはすべて True あるいは False の値を返し、タイマーが存在しているのか、タイマーはアクティブな状態なのか、タイマーは一時停止中なのかを判断するために使用します。
Set Timer by Event
Set Timer by Event ノードは Set Timer by Function Name ノードと同様に機能しますが、違う点は Function Name を指定する代わりに、発行する Custom Event を接続できることです。 Set Timer by Function Name ノードの場合と同様に、これもループに設定することもできます。