ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
Unreal Engine 5(UE5)でSpawnActorなどによって生成したインスタンスにイベントや関数を実行させるには、Spawn Actor from Classノードの戻り値(Return Value)=生成されたインスタンスへの参照を保持し、その参照から対象のカスタムイベントや関数を呼び出します。生成しただけでは外部から命令を送れないため、「参照をつかんでおくこと」が出発点になります。
| この記事の要点 |
|---|
|
基本の考え方:戻り値=生成インスタンスへの参照
UE5のSpawn Actor from Class(C++ではSpawnActor)は、ワールドに新しいアクターを生成し、その生成されたインスタンスへの参照を Return Value として返します。この参照こそが「どのインスタンスに命令するか」を指し示すものです。
UE5のブループリントでは、あるアクターのカスタムイベントや関数を外部から呼ぶには、「対象インスタンスへの参照」と「呼びたいイベント/関数」を線でつなぐ必要があります。Spawnの戻り値はまさにその「対象インスタンスへの参照」なので、これを保持しておけば、後からいつでもそのインスタンスのイベントを実行できます。
逆に言えば、戻り値を受け取らずにSpawnしただけだと、生成されたインスタンスは存在していても外部から名指しできる参照がないため、特定の関数やイベントを呼ぶことができません。
手順:Spawnしたインスタンスのイベントを呼ぶ
ここでは、スポーン元(例:BP_Spawner)からスポーン先(例:BP_SpawnedActor)のカスタムイベントを呼ぶ流れを示します。
| 1 | 呼ばれる側に処理を用意する BP_SpawnedActor を開き、イベントグラフでカスタムイベント(例: StartBehavior)または関数を作成し、実行したい処理(移動開始、エフェクト再生、Print Stringなど)をつなぐ。 |
| 2 | Spawnノードを置く BP_Spawner 側に Spawn Actor from Class ノードを追加し、Class に BP_SpawnedActor を指定する。 |
| 3 | Return Value(参照)を保持する Spawnノードの Return Value を、ドラッグして変数に昇格(Promote to Variable)するか、続く処理へ直接ドラッグする。複数回・後のタイミングで呼ぶなら変数保持が便利。 |
| 4 | 対象のイベント/関数を呼ぶ 保持した参照(または Return Value)からドラッグして、手順1で作った StartBehavior などを検索・配置し、実行ピンをつなぐ。これでそのインスタンスに対してイベントが実行される。 |
Return Value の型が呼びたいクラス(BP_SpawnedActor)と一致していれば、その参照からドラッグするだけで、対象クラスのカスタムイベントや公開関数が候補として表示されます。
具体例:生成した敵キャラに「行動開始」を命令する
敵アクター BP_Enemy を生成し、生成直後に行動を開始させる例です。
BP_Enemy 側:
- カスタムイベント
StartChaseを作成し、ターゲットに向かって移動する処理などをつなぐ。
BP_Spawner(生成する側)側のノードの流れ:
[Spawn Actor from Class] Class = BP_Enemy Spawn Transform = 出現させたい位置・回転 Return Value ──▶ [SET] EnemyRef(BP_Enemy型の変数に保持) │ ▼ EnemyRef ──▶ [StartChase](BP_Enemyのカスタムイベントを呼ぶ) |
このように、Return Value を変数 EnemyRef に保持しておけば、生成直後だけでなく、後のフレームや別のイベントからも EnemyRef を通じて同じインスタンスへ命令を送れます。
BeginPlayより先に値を渡したい場合:Expose On Spawn
「生成と同時に初期パラメータ(HP、移動速度、ターゲットなど)を渡したい」場合、手順4でイベントを呼ぶ方式だとBeginPlayが先に走ってしまい、初期化に間に合わないことがあります。
このようなケースでは、変数のExpose On Spawnを使うと、Spawnノード上で直接、生成時に値を入力できます。手順は次の通りです。
- BP_SpawnedActor 側で変数(例:MaxHP)を作成し、詳細パネルで Instance Editable と Expose On Spawn を有効にする。
- すると BP_Spawner 側の Spawn Actor from Class ノードに、その変数の入力ピン(MaxHP)が現れる。
- そこへ値を接続すると、生成時に値が設定された状態でインスタンスが作られる。
Expose On Spawn で渡した値は、一般にそのアクターのBeginPlayが実行されるよりも前に設定されるため、BeginPlay内でその初期値を前提とした処理を書けます。実行順序の厳密な仕様(特にComponentやネットワーク絡み)はバージョンや構成で挙動が異なる場合があるため、シビアな初期化順に依存する設計では公式ドキュメントの確認と実機での検証を推奨します。
落とし穴と対処
| よくある失敗 | 原因と対処 |
|---|---|
| イベントを呼べない/呼ぶ相手がない | Return Value を保持し忘れている。Spawn後にイベントを呼ぶなら、必ず戻り値を変数に保持するか直接ドラッグして使う。 |
| 目的のカスタムイベント/関数が候補に出ない | 参照の型が汎用Actor型などになっている。Cast To(目的クラスへキャスト)してから、キャスト結果の参照を使う。変数の型自体を目的クラスにしておくとCast不要。 |
| 実行時にエラー(Accessed None) | Spawnに失敗するとReturn ValueがNull(None)になる。Collision Handling設定や出現位置の衝突で生成が拒否されることがある。Is Validでチェックしてから呼ぶ。 |
| 呼んだのに何も起きない(タイミング) | BeginPlayとの前後関係や、まだ初期化が終わっていない可能性。初期値の受け渡しは Expose On Spawn を検討し、外部からの呼び出しは生成完了後に行う。 |
| マルチプレイで動作が安定しない | アクターのSpawnやイベント呼び出しは権限(Authority/サーバー・クライアント)やレプリケーション設定の影響を受ける。ネットワーク前提の場合は権限とレプリケーションの仕様を公式ドキュメントで確認のうえ設計する。 |
応用:イベントディスパッチャーで「呼ばれる側→呼ぶ側」へ通知
ここまでは「生成側 → 生成インスタンス」へ命令する方向でした。逆に、生成インスタンス側で起きた出来事を生成元へ通知したい場合は、イベントディスパッチャーが便利です。
- BP_SpawnedActor にイベントディスパッチャーを作成し、通知したいタイミングでCall(呼び出し)する。
- 生成元では、保持しておいた参照(EnemyRefなど)から Bind Event to ~(ディスパッチャー名) を行い、受け取り側の処理をバインドする。
これにより、生成元のアクターは、各インスタンスからの通知(例:敵が倒された、ゴールに到達した)を受け取って連携処理を実行できます。バインドにも生成インスタンスへの参照が必要な点は共通です。
FAQ
Q. Return Value を変数に保持せず、直接イベントを呼んでも問題ないですか?
A. 生成直後に一度だけ呼ぶなら、Return Value から直接ドラッグして呼んで問題ありません。ただし、後のフレームや別のイベントから同じインスタンスを操作したい場合は、変数に保持しておかないと参照を失います。用途に応じて使い分けてください。
Q. 生成と同時に値を渡すのと、生成後にイベントで渡すのはどちらが良いですか?
A. 「BeginPlayより前に確定していてほしい初期値」は Expose On Spawn でSpawn時に渡すのが確実です。一方、生成後の状況に応じて動的に命令したい処理は、参照経由でカスタムイベント/関数を呼ぶ方式が向いています。両者は併用できます。
Q. C++でも同じ考え方ですか?
A. 基本は同じで、SpawnActorが返すポインタ(生成インスタンスへの参照)を保持し、そのポインタ経由でメンバ関数やイベントを呼びます。ポインタが有効か(nullでないか)の確認や、Spawnパラメータ・テンプレートの扱いなど細部はAPIに依存するため、正確な記述は公式ドキュメントの確認を推奨します。
まとめ
- Spawnしたインスタンスにイベント/関数を実行させる鍵は、Return Value(生成インスタンスへの参照)を保持し、そこから呼ぶこと。
- 流れは「Spawn Actor from Class → Return Value を保持 → 対象のカスタムイベント/関数を呼ぶ」。
- BeginPlayより前に初期値を渡したいなら Expose On Spawn、生成側へ通知したいならイベントディスパッチャー。
- 参照の保持忘れ・Cast忘れ・Spawn失敗によるNull・呼ぶタイミングに注意。シビアな実行順やマルチプレイ仕様は公式ドキュメントで確認を。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 床の上に乗ったらイベントを発生させる方法
- OverlapAllDynamicとOverlapAllの違い
- タイトル画面を作る方法
- サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
- ボタンに文字を記載する方法
- Event ActorBeginOverlapとOn Component Begin Overlapの違い
- キャラクターに特定のオブジェクトとの当たり判定を付ける
- 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
- 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
- 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
- Blenderファイルをインポートする方法
- 鏡を作成する方法
- レベルブループリントでキャラクターの出現を設定する方法
- サードパーソンテンプレートにおけるキャラクター出現の定義
- アイテムに近づいたらボタンを押してイベントを発火させる方法
- 画面の中央にメッセージを表示する方法
- どこからでも呼び出せるカスタムイベントを作成する方法
- カスタムイベントに引数を追加する方法
- 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
- オブジェクトに近づいている間だけメッセージを表示する方法
- PCの画面を操作するUIを作る方法
- コンテンツブラウザに画像を追加する方法
- SetInputMode_UIOnlyを取り消す方法
- 特定の画像の上にマウスカーソルを置いたら手マークにする方法
- オブジェクトがアウトライナーで選択できない原因と解決策
- PlayerStartを作成する方法
- メニュー画面を作成して開く方法
- 「Esc」キーを押してメニュー画面を開く方法
- イベントの「On Clicked」と「On Pressed」の違い
- 「Set Input Mode」の種類と使い方
- 「Set Game Paused」の使い方と詳細解説
- Motion Matchingとは?
- 「GameMode」と「GameModeBase」の違い
- マップに配置したTargetPointを取得する方法
- TargetPointにタグをつけて取得する方法
- Spawnしたインスタンスがイベントを実行する方法
- 特定の時間ごとに処理を実行する方法
- 数値をランダムで出力する方法
- ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
- MaxWalkSpeedを変更する方法
- しゃがむ動作を導入する方法
- キャラクターのアニメーションを設定する方法
- 導入済みのプラグインを確認する方法
- Motion Matchingの導入と必要なプラグイン
- プレイヤーを非表示にする方法
- カメラを傾ける角度を制限させる方法
- 配列からランダムに重ならない要素を特定の数取得する方法
- カメラの映す画面に文字やエフェクトを付ける方法
- キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
- プライマリーデータアセットを活用する方法
- プレイヤーのHPといった変数を定義する最適な場所
- カメラに映った画面をスクリーンショットとして保存する方法
- ゲーム内のカメラ映像を保存して再表示する方法
- HighResShot を使って高解像度の画像を保存する方法(UE5)
- HighResShotで保存した画像のファイル名を取得する方法
- SceneCapture2DとFrameGrabberの画像保存方法の比較
- SceneCapture2Dを使用して画像を保存・取得する方法
- HighResShotとTake High Res Screenshotの違い
- ゲーム終了ボタンを作成する方法
- 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
- 画面上にメッセージを指定された時間表示させる方法
- シェーダコンパイル時間を短縮する方法
- 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
- データベースを活用する方法
- UE5.5がインストールされた環境にUE5.4を追加で導入する方法
- World PartitionとWorld Compositionの違い
- オープンワールドテンプレートとは?
- ポーンをスポーンさせても視点を切り替えない方法
- キャラクター同士がすり抜けてしまう問題の解決方法
- キャラクターの外見を動的に変更
- World Partitionでインスタンスが「アンロード済み」になる問題
- データ アセットとデータ テーブルの違い
- コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
- エディターのソースコードの自動保存の頻度を高める方法
- SpawnActorでSpawn Transform Rotationが反映されない理由
- ミニマップを表示しポーンの位置を反映する方法
- RInterp ToとVInterp Toの違い
- 毎秒実行するイベントの定義方法
- Niagara のエフェクトにコリジョンを持たせる方法
- 「Overlap」と「Hit」の違い
- OverlapはあるがHitがない原因
- Overlapした位置の座標を取得する方法
- ブループリントでレベル間のパラメータを受け渡す方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?