射撃系敵AIの作り方|狙い・弾発射・距離判断のロジック

アクションゲームの作り方

射撃系の敵AIを作りたい。でも、狙いや弾発射の実装が分からない。

多くの学生が最初に感じるのが、この疑問です。

実は、射撃系の敵AIは、いくつかの要素で構成されています。

この記事では、射撃系敵AIの作り方として、狙い・弾発射・距離判断のロジックを解説します。

この記事でわかること

  • 狙いの実装方法
  • 弾発射の実装方法
  • 距離判断のロジック
  • Raycastと弾管理の使い方
ゲーム開発講師
ゲーム開発講師

射撃系の敵AIは、いくつかの要素で構成されています。まずは、基本的な構造から理解しましょう。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

狙いの実装方法

狙い 実装方法

射撃系の敵AIにおける「狙い」とは、敵がプレイヤーの方向を正しく認識し、その方向へ向きを合わせる処理です。

弾発射やRaycastは、この「狙い」が正しく実装されていないと機能しません。

そのため、射撃AIでは最初に必ず作る重要なロジックになります。

狙いの実装は、次の3つの要素で構成されます。

  • プレイヤーの位置を取得
  • プレイヤーへの方向を計算
  • 敵の向きをその方向に合わせる

ここでは、それぞれの役割と意味を順番に解説します。

① プレイヤーの位置を取得する

まず、敵AIが「どこを狙うのか」を知る必要があります。

そのために、プレイヤーの座標(位置情報)を取得します。

この処理によって、敵から見た“目標地点”が明確になります。

狙う対象が決まらなければ、向きも弾の方向も決められないため、このステップはすべての射撃処理の起点になります。

② プレイヤーへの方向を計算する

次に、敵からプレイヤーへ向かう「方向」を計算します。

これは、「敵の位置 → プレイヤーの位置」への方向ベクトルを求める処理です。

normalized を使うことで、距離の長さを除いた「方向だけ」の情報を取得できます。

この方向ベクトルは、

  • 敵の向き調整
  • 弾の発射方向
  • Raycastの向き

など、複数の処理で使い回される重要なデータになります。

③ 敵の向きをプレイヤー方向に合わせる

最後に、計算した方向を使って敵の向きを調整します。

2Dゲームの場合、左右反転で対応するケースが一般的です。

この処理により、

  • 見た目上、敵がプレイヤーの方を向く
  • 弾やRaycastが正しい方向へ飛ぶ

という状態が作られます。

なぜ「狙い」の実装が重要なのか

狙いの処理は、次のロジックすべての土台になります。

  • 弾をどの方向へ発射するか
  • 視界判定(Raycast)をどちらへ飛ばすか
  • 攻撃を開始する条件判定

狙いがズレていると、弾が違う方向に飛ぶ、壁越しに攻撃するといった不具合が発生します。

そのため、射撃系敵AIでは「まず狙える状態を作る」ことが最優先になります。

この3つを正しく組み合わせることで、射撃・Raycast・距離判断がスムーズにつながる敵AIになります。

次のステップでは、この「狙い」を使って弾を発射していきます。

弾発射の実装方法

弾発射 実装方法

弾発射の実装では、「いつ・どこから・どの方向へ弾を出すか」を制御します。

ここでは、狙いのロジックで計算した方向情報をそのまま使って弾を発射していきます。

弾発射の基本的な流れは、次の手順です。

弾発射の実装手順
  • STEP1
    弾のオブジェクトを作成

    弾用のGameObjectを作成し、SpriteとRigidbody2Dを設定します。
    Rigidbody2Dには重力を使わず、速度で直進させます。
  • STEP2
    発射位置を設定

    敵の位置そのままではなく、銃口や発射ポイント用のTransformを用意すると見た目が自然になります。
  • STEP3
    発射方向を設定

    狙いの処理で求めた「敵 → プレイヤー」の方向ベクトルを使って弾を飛ばします。
    これにより、敵の向きと弾の進行方向が一致します。
  • STEP4
    クールタイムを設定

    弾を撃つたびに待ち時間を設けることで、連射を防ぎ、ゲームバランスを調整します。

この流れを押さえれば、射撃系の敵AIに必要な基本的な弾発射処理が完成します。

ゲーム開発講師
ゲーム開発講師

弾発射では、狙いで計算した方向をそのまま使うのがポイントです。
まずはシンプルに「向いた方向へ撃つ」形で実装してみましょう。

距離判断のロジック

距離判断 ロジック

距離判断のロジックでは、「プレイヤーがどれくらい近いか」によって敵の行動を切り替えます。

射撃系の敵AIでは、距離を無視して常に攻撃すると、不自然で理不尽な挙動になります。

そこで、次の3つの要素を組み合わせて距離判断を行います。

  • プレイヤーとの距離を計算
  • 射程範囲内かどうかを判定
  • 距離に応じて行動を切り替える

まず、敵とプレイヤーの現在の距離を計算します。

その距離が、あらかじめ設定した射程範囲内に入っているかをチェックします。

射程範囲内にいる場合のみ、

  • 狙い処理を行う
  • 弾発射を開始する

といった攻撃行動を実行します。

逆に、射程範囲外であれば待機する、移動するなど別の行動に切り替えることで、敵AIの行動にメリハリが生まれます。

距離判断は、後述するRaycastによる視界判定とも組み合わせることで、より自然な射撃系敵AIに発展させることができます。

Raycastと弾管理の使い方

Raycast 弾管理 使い方

射撃系の敵AIを自然に見せるためには、「狙える状況かどうか」を判断する処理と、弾を無駄に増やさない管理処理が欠かせません。

そこで重要になるのが、Raycastと弾管理です。

Raycastと弾管理は、それぞれ次の役割を持っています。

項目 主な用途 目的・効果
Raycast 視界判定 プレイヤーが見えているときだけ攻撃する
弾管理 弾の生成・削除 処理負荷を抑え、安定した動作を保つ
クールタイム 発射間隔の制御 連射を防ぎ、ゲームバランスを調整する

Raycastによる視界判定

Raycastは、敵から見てプレイヤーが「本当に見えているか」を判断するための処理です。

距離だけで攻撃を開始すると、壁の向こう側にいるプレイヤーにも弾を撃ってしまうことがあります。

そこで、

  • 敵の位置から
  • プレイヤーの方向へ
  • Raycastを飛ばし

途中に壁などの障害物があるかをチェックします。

Raycastがプレイヤーに直接当たった場合のみ、「攻撃してよい状態」と判定することで、
不自然な壁越し攻撃を防げます。

弾管理でパフォーマンスを保つ

射撃AIでは、弾を撃つたびにオブジェクトが生成されます。
この処理を雑に行うと、弾が増えすぎてパフォーマンス低下の原因になります。

そのため、

  • 画面外に出た弾を削除する
  • 一定時間経過した弾を消す
  • 同時に存在できる弾の数を制限する

といった弾管理の仕組みが必要になります。

弾管理を行うことで、長時間プレイしても処理が重くなりにくいゲームになります。

クールタイムとの関係

Raycastと弾管理は、前のセクションで解説したクールタイム設定とも密接に関係しています。

  • Raycastで「撃ってよい状況か」を判断
  • クールタイムで「今撃てるか」を制御
  • 弾管理で「撃った後の処理」を整える

この3つを組み合わせることで、自然で安定した射撃系敵AIが完成します。

初心者がつまずきやすい射撃系敵AIの失敗例と対処法

射撃系敵AI 失敗例 対処法

射撃系の敵AIは、狙い・弾発射・距離判断・Raycastと、複数の処理が組み合わさっています。

そのため、初心者の方は「どこが原因でおかしくなっているのか分からない」と感じやすいポイントでもあります。

ここでは、初心者がつまずきやすい代表的な失敗例と、その対処法を紹介します。

弾がプレイヤーとは違う方向に飛んでしまう

この場合、狙いの方向ベクトルが正しく更新されていない可能性があります。

  • プレイヤーの位置を毎回取得していない
  • 弾発射時に古い方向を使っている

対処法としては、弾を発射する直前に、必ず狙いの方向を再計算するようにします。

壁越しにプレイヤーへ攻撃してしまう

距離判定だけで攻撃を開始していると、壁の向こう側にいるプレイヤーにも弾を撃ってしまいます。

この問題は、Raycastによる視界判定を追加することで防げます。

距離内 + 視界内・・この両方を満たしたときだけ攻撃するようにすると、自然な挙動になります。

敵がずっと弾を撃ち続けてしまう

クールタイムを設定していない、またはクールタイムの管理が正しくできていない可能性があります。

  • 発射ごとに待ち時間をリセットしているか
  • 一定時間経過後に再び撃てるようになっているか

を確認し、発射間隔を制御する処理を見直しましょう。

処理が重くなったり、動作が不安定になる

弾のオブジェクトが削除されずに残り続けると、パフォーマンス低下の原因になります。

  • 画面外に出た弾を削除しているか
  • 一定時間後に弾を消しているか

といった弾管理を行うことで、安定した動作を保つことができます。

これらの失敗は、誰でも一度は通るポイントです。

動作がおかしいと感じたら、まずはこれらの点をチェックしてみてください。

実践的な射撃系敵AI制作を学ぶには

Unity 射撃系敵AI 講座

ここまで、射撃系敵AIの作り方について解説してきました。

射撃系の敵AIは、いくつかの要素で構成されています。

Unity入門の森では、Unityを使ったアクションゲームの作り方を、基礎から完成まで丁寧に解説しています。

コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。

Q: 初心者でも本当に作れるの?
A: はい。Unity入門の森の講座では、プログラミング経験がなくても、手順通りに進めれば完成までたどり着けます。分からない部分は、動画と図解で詳しく説明しています。

アクションゲーム制作に特化した講座なら、効率的にスキルアップできます。

ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。

ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

まとめ

射撃系敵AI まとめ

射撃系敵AIの作り方について解説しました。

要点のまとめ

  • 狙いは、プレイヤーの位置を取得し、その方向を向く
  • 弾発射は、クールタイムを設定することで、連射を防ぐ
  • 距離判断は、射程範囲内にいるときだけ、攻撃を開始する
  • Raycastと弾管理を使うことで、より高度な敵AIができる

基本を押さえれば、あとは応用していくだけです。

まずは、シンプルな射撃系敵AIから始めてみてください。

動かしながら理解を深めていくのが、上達への近道です。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

コメント

タイトルとURLをコピーしました