1.

UE5のEvent BeginPlayとは|呼ばれるタイミングと初期化処理の使い方

編集
この記事の要点
  • Event BeginPlay は、アクターが生成され初期化が完了したあとに一度だけ呼ばれる、ゲーム開始時の初期化用イベントです。
  • 呼ばれるのは「ゲームプレイが始まったとき」。エディタでアクターを配置・編集した瞬間に走る Construction Script とは別物です。
  • 実行順は コンストラクタ → Construction Script → BeginPlay → Tick(毎フレーム) → EndPlay(破棄時) の流れで位置づけられます。
  • 主な用途は、変数の初期化・UI/HUD の表示・タイマー開始・他アクターへの参照取得など「最初の一回だけ行いたい準備」。
  • 同じフレーム内の他アクターの BeginPlay 完了順序は保証されないため、初期化順に依存する設計は避けるのが安全です。

 

Event BeginPlay は、アクター(Actor)が生成(スポーン)され初期化が完了したあとに一度だけ呼ばれる、ゲーム開始時の初期化用イベントです。ブループリントのイベントグラフでは最初に置かれることが多いノードで、「ゲームが始まった瞬間に、このアクターでまず何をするか」をここに書きます。本記事では、Unreal Engine 5(以下 UE5)系での Event BeginPlay について、呼ばれるタイミング・ライフサイクル上の位置づけ・具体的な使い方・他の初期化処理との違い・落とし穴を整理します(記述は2026年時点の一般的な挙動に基づきます。細かなバージョン差はEpic公式ドキュメントの確認を推奨します)。

 

Event BeginPlay とは何のイベントか

Event BeginPlay は、アクターやアクターコンポーネントがゲームプレイ可能な状態になった直後に呼び出されるイベントです。「ゲームプレイ可能な状態」とは、そのアクターのコンポーネントが用意され、必要な初期化(PostInitializeComponents など)が済み、ゲームのレベルでプレイが開始された状態を指します。

重要なのは、BeginPlay が走るのは実際にゲームが動き出したときだという点です。エディタ上でアクターをレベルに置いたりプロパティを編集したりした時点では呼ばれません(その役割は後述の Construction Script が担います)。そのため BeginPlay の中では、ゲーム実行中であることを前提とした処理――他のアクターを参照する、タイマーを動かす、UI を画面に出す、といった処理を安全に書けます。

 

呼ばれるタイミングとライフサイクル

アクターが生成されてから破棄されるまでの大まかな流れの中で、BeginPlay がどこに位置するかを押さえると理解が早くなります。代表的なイベントの並びは次のとおりです。

段階 呼ばれる回数 主な役割
1 コンストラクタ(C++) 生成時に1回 デフォルト値の設定・コンポーネントの生成(ゲーム外の状態に依存しない初期化)
2 Construction Script 配置・編集時/スポーン時 エディタ上の見た目・配置に応じたセットアップ
3 Event BeginPlay ゲーム開始時に1回 ゲーム実行を前提とした初期化(本記事の主役)
4 Event Tick 毎フレーム 継続的な更新処理(移動・判定など)
5 Event EndPlay 破棄・終了時 後始末(タイマー解除・参照のクリアなど)

 

つまり BeginPlay は「準備(コンストラクタ・Construction Script)が終わり、毎フレームの処理(Tick)が始まる直前」に挟まる、ワンショットの初期化ポイントだと捉えると分かりやすいです。レベルに最初から配置されているアクターも、ゲーム中に動的にスポーンされたアクターも、どちらも生成後に BeginPlay が呼ばれます(動的スポーンの場合はスポーンされたそのタイミングで呼ばれます)。

 

主な用途

BeginPlay は「ゲーム開始時に一度だけ行いたい準備」を書く場所です。代表的な用途は次のとおりです。

  • 変数の初期化:HP・スコア・状態フラグなどに初期値をセットする。
  • UI / HUD の表示:Widget を生成して画面に追加する(Create Widget → Add to Viewport)。
  • タイマーの開始:一定間隔で処理を走らせる Set Timer by Function Name / by Event を起動する。
  • 他アクターやコンポーネントの参照取得:Get All Actors of Class や参照変数で連携相手をキャッシュする。
  • サウンド・エフェクトの再生:開始時の演出を一度だけ鳴らす。
  • セーブデータの読み込み・適用:保存済みの状態をゲーム開始時に反映する。

 

ブループリントでの使い方(手順)

ブループリントでは、Event BeginPlay ノードに処理をつないでいくだけで初期化を実装できます。基本の手順は次のとおりです。

  1. 対象のアクターブループリントを開き、イベントグラフ(Event Graph) を表示します。
  2. 多くの場合、新規アクターブループリントには Event BeginPlay ノードが最初から薄く配置されています。無ければ、グラフの何もない場所で右クリックし、検索欄に「BeginPlay」と入力して Event BeginPlay を追加します。
  3. BeginPlay ノードの右側にある白い実行ピン(▷)から、行いたい処理のノードへドラッグして接続します。
  4. 処理を順番につなげていけば、ゲーム開始時に上から下へ実行されます。

たとえば「ゲーム開始時にアクターの位置を初期化し、開始音を鳴らす」なら、BeginPlay → Set Actor Location → Play Sound 2D の順につなぐ、といった形になります。同じ Event BeginPlay ノードは1つのグラフに1つだけ置く点にも注意してください(複数の初期化はノードを直列につないで表現します)。

 

C++ での BeginPlay() オーバーライド例(任意)

C++ でアクターを実装する場合、AActor の仮想関数 BeginPlay() をオーバーライドして初期化処理を書きます。親クラスの初期化が走るよう、必ず先頭で Super::BeginPlay() を呼ぶのが基本です。

// MyActor.h(宣言部・抜粋)

protected:

    virtual void BeginPlay() override;

 

// MyActor.cpp(実装部)

void AMyActor::BeginPlay()

{

    Super::BeginPlay();  // 親クラスの初期化を必ず先に呼ぶ

    UE_LOG(LogTemp, Log, TEXT("BeginPlay called"));

    // ここにゲーム開始時の初期化を記述

}

 

C++ の BeginPlay() と、ブループリントの Event BeginPlay は同じライフサイクル上のイベントです。一般に C++ 側の BeginPlay() が先に走り、その流れでブループリント側の Event BeginPlay が実行されます。なお、コンポーネントの生成(CreateDefaultSubobject)はコンストラクタ内でのみ行う必要があり、BeginPlay では行えない点に注意してください(詳細な呼び出し順や制約は公式ドキュメントの確認を推奨します)。

 

他の初期化処理との違い(比較表)

UE5 には初期化に関わる仕組みが複数あり、混同しやすいポイントです。役割の違いを整理します。

仕組み 呼ばれるタイミング ゲーム実行中か 主な使いどころ
コンストラクタ
(C++)
アクター生成時(CDO生成を含む) 必ずしも実行中ではない デフォルト値・コンポーネント生成。ゲーム状態に依存しない初期化
Construction Script エディタでの配置・編集時、およびスポーン時 エディタ上でも走る 配置パラメータに応じた見た目・構成のセットアップ
Event BeginPlay ゲームプレイ開始後、初期化完了時に1回 ゲーム実行中のみ 他アクター参照・タイマー・UI表示など実行前提の初期化

 

ポイントは「Construction Script はエディタ上でも走るのに対し、BeginPlay はゲームを実行したときだけ走る」ことです。他のアクターを探したりタイマーを動かしたりする処理を Construction Script に書くと、エディタ操作中に意図せず動いてしまうことがあるため、ゲーム実行を前提とする初期化は BeginPlay 側に書くのが定石です。

 

使用時の落とし穴

注意したいポイント
  • 他アクターの初期化順序に依存しない:同じフレームでスポーンする複数アクターの BeginPlay が「どの順で」完了するかは保証されません。「相手の BeginPlay が先に終わっている前提」のコードは不安定になりがちです。相手がまだ準備できていない場合は、後追いで参照を取り直す、相手側からの通知(イベント/デリゲート)を待つ、といった設計が安全です。
  • 一度しか呼ばれない:BeginPlay は基本的にアクターごとに1回だけ実行されます。リスポーンやリセットのたびに初期化したい場合は、BeginPlay とは別に「初期化用の関数(カスタムイベント)」を用意し、必要なときに呼び出す形にします。
  • Construction Script と取り違えない:エディタ上で見た目を反映したいのに BeginPlay に書くと実行するまで反映されません。逆に、実行時専用の処理を Construction Script に書くとエディタ操作中に副作用が出ます。役割で書き分けてください。
  • 重い処理の集中に注意:BeginPlay は開始時に走るため、多数のアクターで重い処理を一斉に行うと開始時のカクつきにつながることがあります。必要なら遅延ロードやタイマー分散を検討します。

 

よくある質問(FAQ)

Q1. Event BeginPlay と Event Tick はどう違いますか?
BeginPlay はゲーム開始時に一度だけ呼ばれる初期化用、Event Tick は毎フレーム繰り返し呼ばれる更新用です。最初の準備は BeginPlay、その後の継続的な処理は Tick、と役割を分けて使います。

Q2. レベルに最初から置いてあるアクターと、ゲーム中にスポーンするアクターで BeginPlay は違いますか?
どちらも生成後に BeginPlay が呼ばれます。違いは呼ばれるタイミングで、配置済みアクターはゲーム開始時に、動的スポーンのアクターはスポーンされたその時点で呼ばれます。

Q3. C++ で BeginPlay() をオーバーライドするとき注意することは?
先頭で Super::BeginPlay() を呼び忘れないことです。これを省くと親クラスの初期化が走らず、不具合の原因になります。また、コンポーネントの生成はコンストラクタで行う必要があり、BeginPlay では行えません。挙動の細部はバージョンにより差があり得るため、公式ドキュメントの確認を推奨します。

 

まとめ

Event BeginPlay は、アクターが生成・初期化されたあとゲーム開始時に一度だけ呼ばれる、UE5 の基本的な初期化イベントです。コンストラクタや Construction Script との役割の違い(特に「実行中だけ走る」という性質)と、他アクターの初期化順序に依存しないという注意点を押さえておけば、安定した初期化処理を組み立てられます。細かな呼び出し順やバージョン固有の挙動については、Epic 公式のアクターライフサイクルのドキュメントを併せて確認すると確実です。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Event BeginPlay
  2. Event ActorBeginOverlap
  3. Event Tick
  4. on component begin overlap
  5. On Component Hit
  6. CameraBoom(Spring Arm)
  7. Get Player Character
  8. Nav Mesh Bounds Volume
  9. AI MoveTo
  10. Pawn
  11. Create Render Target 2D
  12. Take High Res Screenshotノード
  13. Sphere Reflection Capture
  14. Event Tickノード
  15. ウィジェットのキャンバスパネル
  16. DefaultSceneRoot
  17. FloatingPawnMovement
  18. Set World Rotation
  19. Event Any Damage
  20. Set World Rotation
  21. VInterp To
  22. Get Socket Transform

最近更新/作成されたページ