敵に向かって弾を撃ちたい。倒した敵の場所にアイテムを落としたい。ボタンを押したら足元にトラップを置きたい。やりたいことは違いますが、必要な処理は共通しています。 実行中に、レベルへアクターを1つ増やす ことです。
UE5でこれを担当するのが Spawn Actor from Class です。さらに、出したアクターを「弾らしく」動かす Projectile Movement Component が標準で用意されています。この記事では、Spawn Actorの各ピンの意味、初心者が最初にぶつかる「弾が出ない」問題、Projectile Movementの主要パラメータ、そしてLine Traceとの使い分けを解説します。
この記事でわかること
- Spawn Actor from Class の5つのピンが何を決めているか
- 「弾が出ない」の原因になる Collision Handling Override
- Owner と Instigator を埋めておく意味
- Projectile Movement Component で速度・重力・跳ね返りを決める
- Initial Life Span で撃ちっぱなしの弾を掃除する
- Line Trace と実体の弾、どちらを選ぶか
- 実践: 弾を撃ち、当たった相手にダメージを与えて弾は消える
Spawn Actor from Classの5つのピン
Blueprintのグラフで右クリックし、 Spawn Actor from Class を追加します。 Class に何かを選ぶまでピンの一部は出てこないので、まず先にクラスを選んでください。

| ピン | 型 | 決めていること |
|---|---|---|
| Class | class | 何を出すか |
| Spawn Transform | Transform | どこに、どの向きで、どの大きさで出すか |
| Collision Handling Override | enum | 出そうとした場所に何かあったときどうするか |
| Owner | Actor | このアクターの持ち主 |
| Instigator | Pawn | この行為の主体(誰が出したか) |
戻り値の Return Value には、生成されたアクターの参照が入ります。ここで押さえておきたいのは、 生成に失敗すると Return Value が空になる ことです。生成直後に変数へ代入したり関数を呼んだりするなら、 Is Valid で確認してから使ってください。
Spawn Transformの作り方
Spawn TransformはTransform構造体なので、そのままでは位置だけを渡せません。方法は2つあります。
| 方法 | 手順 |
|---|---|
| Make Transform を使う | Make Transform ノードを追加し、Location / Rotation / Scale を個別に繋いでSpawn Transformへ入れる |
| ピンを分解する | Spawn Transformピンを右クリックし、 Split Struct Pin を選ぶ。ピンが3本に分かれる |
慣れると Split Struct Pin のほうが速く、ノードも増えません。分解したピンは、右クリックの Recombine Struct Pin で元に戻せます。
位置は、Line Traceと同じ考え方で作ります。
生成位置 = 自分の位置 + (前方ベクトル × 距離)+ (0, 0, 高さ)
キャラクターの中心にそのまま出すと、生成した瞬間に自分自身へ当たります。 前方へ100〜150cm、高さを50cmほど足して、体の外側に出すのが基本形です。この計算の詳しい組み方はLine Traceの記事で扱っています。
回転は忘れがちですが、弾では極めて重要です。理由は次の節以降で分かります。
「弾が出ない」の犯人:Collision Handling Override
Spawn Actorを組んだのに何も出ない。この症状の多くは、このピンが原因です。
UEは、アクターを生成しようとした位置に すでに何かが重なっている 場合、どう振る舞うかを選べるようになっています。選択肢は5つです。

| 選択肢 | 挙動 |
|---|---|
| Default | 生成するアクターのクラス側の設定に従う |
| Always Spawn, Ignore Collisions | 重なっていても必ず生成する |
| Try To Adjust Location, But Always Spawn | 重ならない場所を探してずらす。見つからなくても生成する |
| Try To Adjust Location, Don't Spawn If Still Colliding | 重ならない場所を探し、それでも駄目なら生成しない |
| Do Not Spawn | 重なっていたら生成しない |
既定は Default で、これは生成される側のクラスが持つ Spawn Collision Handling Method (Class Defaultsの Actor カテゴリ)に従うという意味です。 出ないときは、まずここを確認してください。
弾のように「絶対に出したい」ものは、Spawn Actor側で Always Spawn, Ignore Collisions を明示するのが確実です。逆に、敵のリスポーンやアイテムの配置では Try To Adjust Location, But Always Spawn が便利です。壁にめり込む位置を指定してしまっても、エンジンが少しずらして置いてくれます。
補足: 「必ず生成する」を選んでも、生成したアクターが壁の中に居ることに変わりはありません。物理シミュレーションを有効にしていれば、次のフレームで押し出されて吹き飛ぶことがあります。 生成できたかどうかと、生成した後に破綻しないかは別の問題 です。
OwnerとInstigatorを埋める意味
この2つは空のままでも生成できてしまうため、放置されがちです。ただ、後から効いてきます。

| ピン | 型 | 指すもの | 弾の場合に渡すもの |
|---|---|---|---|
| Owner | Actor | 所有関係の親 | 撃ったキャラクター(Self) |
| Instigator | Pawn | 行為の主体 | 撃ったキャラクター(Self) |
キャラクターから弾を撃つ場合は、どちらにも Self を渡して構いません。型が違うだけで、指しているものは同じです。
埋めておく実利は、 弾の側から撃った本人を辿れるようになる ことです。弾のBlueprintで Get Instigator を呼べば、撃ったPawnが返ります。 Get Instigator Controller なら、そのPawnを操作しているControllerが取れます。
これが要るのは、たとえば次の場面です。
- スコアやキルログ : 誰が倒したかを記録する
- 自分の弾で自分が死ぬのを防ぐ : 当たった相手がInstigatorと同じかを確認する
- ダメージの責任者を渡す :
Apply DamageのEvent Instigatorは Controller 型なので、Get Instigator Controllerの結果をそのまま繋げます
最後の項目が実務では一番効きます。Instigatorを空のままにすると、爆発で敵を倒してもスコアが誰にも入らない、という不具合になります。ダメージ側の詳しい仕組みは体力とダメージの記事を参照してください。
Projectile Movement Componentで飛ばす
アクターを出しただけでは、その場に立っているだけです。飛ばすのは Projectile Movement Component の仕事です。
Blueprintエディタの左上「Add」から Projectile Movement を追加します。このコンポーネントは、 同じアクターのルートコンポーネントを毎フレーム動かします 。自分で Set Actor Location を書く必要はありません。
主要なパラメータは5つです。
| 項目 | 既定値 | 意味 |
|---|---|---|
| Initial Speed | 0.0 | 発射時の速さ(cm/秒) |
| Max Speed | 0.0 | 速さの上限。 0.0は「上限なし」 |
| Projectile Gravity Scale | 1.0 | 重力の効き具合。0.0で直進、1.0で通常の落下 |
| Should Bounce | オフ | 当たったときに跳ね返るか |
| Bounciness | 0.6 | 跳ね返りの強さ(Should Bounceがオンのとき) |

Initial Speed が既定で 0.0 である点に注意してください。 「弾は出るのに動かない」の原因はほぼこれです。まっすぐ飛ぶ弾なら 3000.0 あたりが扱いやすい値です。
飛ぶ方向はアクターの回転が決める
Projectile Movementには「方向」の項目がありません。では何を見て飛ぶのかというと、 アクターのローカル +X 方向(前方) です。
つまり、Spawn Transformの Rotation にキャラクターの向きを渡さないと、弾は常にワールドの +X 方向へ飛びます。 「撃つたびに同じ方向へ飛んでいく」ときは、Rotationピンを繋ぎ忘れています。
キャラクターの向きに飛ばすなら Get Actor Rotation 、カメラで狙った方向に飛ばすなら Get Control Rotation を渡します。
用途別の設定
| 作りたいもの | Initial Speed | Gravity Scale | Should Bounce |
|---|---|---|---|
| まっすぐ飛ぶ弾 | 3000.0 | 0.0 | オフ |
| 弓矢・投擲物 | 1500.0 | 1.0 | オフ |
| 手榴弾 | 1200.0 | 1.0 | オン |
| ふわり と浮く魔法弾 | 800.0 | 0.1 | オフ |
同じコンポーネントで、数値を変えるだけでこれだけの動きが作り分けられます。ベースとなる BP_ProjectileBase を1つ作り、そこから子Blueprintを派生させて数値だけ変える形にすると管理が楽になります。
補足: 追尾する弾も作れます。
Is Homing Projectileをオンにし、Homing Target Componentに追いかける相手のコンポーネントを、Homing Acceleration Magnitudeに追尾の強さを入れます。強さを大きくしすぎると相手の周りを回り続けるので、小さめの値から試してください。
弾のActor構成とHitイベント
弾のBlueprintは、Actorを親クラスにして作ります。中身は3点セットです。
| コンポーネント | 役割 | 設定のポイント |
|---|---|---|
| Sphere Collision(ルート) | 当たり判定 | Simulation Generates Hit Events をオン |
| Static Mesh | 見た目 | Collision Presets を NoCollision にする |
| Projectile Movement | 動き | Initial Speed と Gravity Scale を設定 |
