初心者必見!現場レベルの「ゲーム制作講座PDF」を無料プレゼント中!▶

Unityで敵AIを実装 | 追尾とパトロール

Unity ゲーム制作実践

敵が同じ場所で止まったまま、プレイヤーを無視する——そんな状態では、ゲームに緊張感が生まれません。

最初から複雑な行動木を作る必要はありません。
パトロール → 発見 → 追尾の3状態だけでも、十分「動いている敵」に感じられます。

この記事では、2Dアクション向けの距離判定AIと、3D向けのNavMeshAgent概要を整理し、089ボス戦へ発展する土台も示します。

  • 敵が置いてあるだけで、一切動かない…
  • 追尾のコードは書いたが、壁をすり抜けて変な動きをする。
  • NavMeshと距離判定、どちらを使えばいいか分からない。

✨ この記事でわかること

  • パトロール・追跡・待機の3状態AIの設計
  • 2Dでの距離判定と左右往復パトロール
  • プレイヤー発見時の状態切替の実装
  • 3D NavMeshAgentを使った追尾の概要
  • 090当たり判定・080攻撃との接続
  • 初心者でも理解できる解説

\プログラミング未経験でも大丈夫!まずは1本作り切ろう/

初心者が最初に選ぶならコレ

Unity ノンフィールドRPG
+スレスパ風JRPG講座

★★★★★ (Unity6対応)

Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。

講座を見てみる \ゼロからでもスマホ対応RPGが作れる!/

憧れのアクションゲームに挑戦

Unity 2Dアクションゲーム
の作り方講座(ロックマン風)

★★★★★ (スマホ化・広告実装)

初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。

講座を見てみる \初心者でも本格ACTが完成する!/

3Dゲーム開発の入口はここ

ゼルダ風3Dアクションゲーム
の作り方講座

★★★★★ (スマホ化対応)

「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。

講座を見てみる \初心者でも全16回で3Dゲームが完成!/

敵AIの基本は3状態から

敵の行動は、enumで状態を管理するのがシンプルです。
266の行動パターン記事へ進む前に、この3つを確実に動かしましょう。

状態 行動 切り替え条件
Patrol(パトロール) 左右に一定距離を往復 プレイヤーが視界内に入る
Chase(追尾) プレイヤー方向へ移動 プレイヤーが視界外に出る
Idle(待機) その場で停止(任意) 初期状態や攻撃前の溜め

視界は「距離+方向」の簡易判定で十分です。
最初は距離だけ(例:5m以内)でも動きます。

2D敵AIの実装例

横スクロール2Dでは、Transform.positionを直接動かす方法が扱いやすいです。
Rigidbody2Dを使う場合はMovePositionで移動します。

using UnityEngine;

public enum EnemyState { Patrol, Chase }

public class EnemyAI2D : MonoBehaviour
{
  public Transform player;
  public float patrolSpeed = 2f;
  public float chaseSpeed = 4f;
  public float detectRange = 5f;
  public float patrolLeft = -3f;
  public float patrolRight = 3f;
  EnemyState state = EnemyState.Patrol;
  int direction = 1;
  float startX;

  void Start => startX = transform.position.x;

  void Update
  {
    if (player == null) return;
    float dist = Vector2.Distance(transform.position, player.position);
    state = dist <= detectRange ? EnemyState.Chase : EnemyState.Patrol;

    if (state == EnemyState.Chase)
      MoveToward(player.position, chaseSpeed);
    else
      Patrol;
  }

  void Patrol
  {
    transform.Translate(Vector2.right * direction * patrolSpeed * Time.deltaTime);
    if (transform.position.x >= startX + patrolRight) direction = -1;
    if (transform.position.x <= startX + patrolLeft) direction = 1;
  }

  void MoveToward(Vector3 target, float speed)
  {
    Vector3 dir = (target - transform.position).normalized;
    transform.position += dir * speed * Time.deltaTime;
    if (dir.x != 0) transform.localScale = new Vector3(Mathf.Sign(dir.x), 1, 1);
  }
}

InspectorでplayerにプレイヤーのTransformを割り当てます。
FindWithTag("Player")で取得する方法でもよいです。

管理人
管理人

最初はパトロールだけ動かし、プレイヤーが近づいたらDebug.Logを出すテストから始めましょう。
状態切替が確認できてから移動処理を足すと迷いません。

視界判定を少しだけ強化する

距離だけだと壁の向こうのプレイヤーも見えてしまいます。
2DならPhysics2D.Raycastで障害物を挟んでいないか確認できます。

bool CanSeePlayer
{
  Vector2 dir = player.position - transform.position;
  RaycastHit2D hit = Physics2D.Raycast(transform.position, dir.normalized, detectRange);
  return hit.collider != null && hit.collider.CompareTag("Player");
}

090の当たり判定と138のLayer設定を組み合わせ、Groundレイヤーに当たったら視界外と判定する設計も可能です。

3D NavMeshAgentの概要

3Dアクションでは、NavMeshを焼いてNavMeshAgentで移動させる方法が定番です。
045のNavMesh記事で環境設定を済ませたうえで、次のように目的地を更新します。

  • NavMeshAgentコンポーネントを敵に追加
  • Chase状態でagent.SetDestination(player.position)
  • Patrol状態でウェイポイント間をSetDestinationで巡回

2Dと3Dで移動の仕組みは違いますが、Patrol / Chase の状態設計は共通です。
089のボス戦も、この土台の上に攻撃パターンを足していきます。

敵AIの実装手順
  • STEP1
    EnemyStateのenumを定義

    PatrolとChaseから開始
  • STEP2
    パトロール移動を実装

    左右の境界で方向反転
  • STEP3
    距離でChaseに切替

    detectRange以内で追尾開始
  • STEP4
    スプライトの向き反転

    localScale.xで左右を向く
  • STEP5
    080攻撃と接続

    Chase中に攻撃範囲内なら攻撃状態へ

080攻撃・090当たり判定との接続

敵がプレイヤーに近づいたら攻撃する場合、Chase状態のうち距離が1m以下になったらAttack状態へ切り替えます。
080の攻撃実装で作ったAttackを呼び、クールタイム中はIdleに戻す流れが自然です。

スポーン位置を固定したい場合は、088のパトロール開始地点(startX)をスポナー側で設定し、敵プレハブをInstantiateする141の記事と組み合わせます。
ウェーブ制のシューティングでは、一定間隔で敵を生成しながら同じEnemyAI2Dを使い回す設計が効率的です。

プレイヤーへのダメージは、090のOnTriggerEnter2Dで判定します。
敵の攻撃HitboxにIs Triggerを付け、Playerタグと衝突したら081のHPを減らします。

つまずきやすいポイント

敵AIでよくある問題は次のとおりです。

  • 敵が動かない → player参照がnull、またはUpdateが止まっている
  • 壁をすり抜ける → Rigidbody2DとCollider2Dを付け、KinematicでMovePositionを使う
  • 追尾がガクガクする → 移動速度が高すぎる。
    chaseSpeedを下げる
  • NavMeshで動かない → 敵がNavMesh上にいない。
    Bakeし直す

SceneビューでdetectRangeをGizmos描画すると、調整がしやすくなります。
OnDrawGizmosSelectedでワイヤー球を表示する方法が便利です。

敵を複数配置する場合は、同じEnemyAI2Dスクリプトをそのまま使えます。
patrolLeftとpatrolRightをInspectorで個別に設定し、startXをStartで記録する設計のため、配置位置ごとに往復範囲が自動で決まります。
264の2D敵AI特化記事も、同じ考え方をより詳しく扱っています。

管理人
管理人

行動木や複雑なAIは後回しで大丈夫です。
1体の敵がパトロールして追いかけてくる——それだけでゲームの印象は大きく変わりますよ。

記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう

知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。

Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座

  • Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
  • Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
  • 初心者でも迷わず進められる丁寧な解説構成
  • ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。

Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。

「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。

Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!

Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

Unity 2Dアクションゲームの作り方講座(ロックマン風)

  • ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
  • 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
  • スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
  • 敵AI15体・多彩なマップギミック・武器システムを完全実装
  • 完全オリジナルゲームをアセット不使用で素材提供付きで制作

Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。

全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。

「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。

スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!

ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

ゼルダ風3Dアクションゲームの作り方講座

  • ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
  • 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
  • スマホ化対応で実機で動かせるゲームが完成
  • アセットを使った実践的なゲーム開発手法が身につく
  • 画像・動画・全ソースコード公開の充実したサポート

ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。

全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。

「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。

初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!

まとめ

Unityの敵AIは、Patrol / Chase の状態切替 → 2Dは距離判定で移動 → 3DはNavMeshAgent → 080攻撃と接続、この順で実装すると迷いにくいです。
089のボス戦は、この基本の上にHPと攻撃パターンを足していきます。

動く敵が1体いるだけで、ステージの雰囲気ががらりと変わります。
敵AIからボス戦まで一連で学びたい方は、Unity入門の森の2Dアクション講座も、パトロールからボスまで追える教材として参考になります。

今日は左右往復する敵を1体置き、プレイヤーが近づいたら追いかけてくるところまで進めてみてください。

敵の移動速度は、プレイヤーより少し遅めに設定すると「追いつかれそうで追いつかれない」緊張感が生まれます。
chaseSpeedをプレイヤーの移動速度の80%程度から調整してみましょう。

コメント

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