MENU

ゲームAIの基本と実装:シンプルなAIの作り方

ゲームAIの基本と実装:シンプルなAIの作り方

「敵がちゃんと動かない…」
「もっと賢いAIを作りたい!」

ゲーム開発を進めると、AI(人工知能)をどう実装するかで悩むことが多くなります。
特にインディーゲーム開発では、「強すぎず、弱すぎず、楽しい敵AI」を作るのが大きな課題になります。

そこで今回は、「ゲームAIの基本とシンプルな実装方法」について、
初心者でも理解しやすい形で解説していきます!


目次

1. ゲームAIとは?

ゲームAIとは、プレイヤーの相手となるキャラクターや敵を動かすためのプログラムです。

✅ FPSなら「敵がプレイヤーを探して攻撃する」
✅ 格ゲーなら「相手の攻撃に合わせてガードやカウンターを取る」
✅ パズルゲームなら「コンピューターが適切な手を選ぶ」

現実のAI(機械学習など)とは異なり、ゲームAIはルールベース(手続き的な処理)が中心です。
つまり、学習するのではなく、「こういう時はこう動く」というルールを決めて動かします。


2. ゲームAIの基本的な種類

1. スクリプト型AI(決め打ち)

✅ あらかじめ決めたパターンで行動する。
✅ 一番シンプルなAIの作り方。

例:2Dアクションゲームの敵

  • 右へ歩く
  • 端に着いたら反転して左へ歩く
  • プレイヤーが近づいたら攻撃
pythonコピーする編集するif player_in_range():
    attack()
else:
    move_forward()

メリット:簡単に作れる!
デメリット:動きが単調で読まれやすい。


2. ステートマシン(状態遷移)

✅ 状態(攻撃・移動・逃走など)を分けて管理する。
✅ ゲームAIの定番手法。

例:敵AIの状態遷移

状態条件次の状態
待機プレイヤーが近づく追跡
追跡プレイヤーに攻撃可能攻撃
攻撃プレイヤーが離れる追跡
攻撃HPが少なくなる逃走

Pythonでのシンプルな例(擬似コード)

pythonコピーする編集するclass Enemy:
    def __init__(self):
        self.state = "WAIT"

    def update(self):
        if self.state == "WAIT":
            if player_is_near():
                self.state = "CHASE"

        elif self.state == "CHASE":
            if can_attack():
                self.state = "ATTACK"
            elif player_is_far():
                self.state = "WAIT"

        elif self.state == "ATTACK":
            attack()
            if player_is_far():
                self.state = "CHASE"

メリット:管理しやすく、柔軟なAIを作れる。
デメリット:状態が増えると複雑になりやすい。


3. パスファインディング(経路探索)

✅ AIが「最適な道を探す」ための技術。
✅ 代表的な手法:A*(Aスター)アルゴリズム。

A*アルゴリズムの基本

  • スタート地点からゴールまでの「コスト」を計算。
  • 一番効率の良いルートを選択して進む。

例:2Dタイルマップでの敵移動

pythonコピーする編集するpath = a_star(start_position, target_position)
for step in path:
    move_to(step)

メリット:迷路のようなマップでも敵がスムーズに移動できる。
デメリット:計算量が増えると処理が重くなる。


4. ビヘイビアツリー(行動ツリー)

✅ 「条件分岐」のようにAIの行動をツリー状に組み立てる。
✅ ステートマシンよりも拡張しやすい。

pythonコピーする編集するif enemy_near():
    if can_attack():
        attack()
    else:
        move_closer()
else:
    patrol()

メリット:複雑なAIでもスッキリ管理できる。
デメリット:初めて使うときは少し難しい。


3. シンプルな敵AIを作ってみよう!

ターゲットを追いかけるシンプルな敵

pythonコピーする編集するclass Enemy:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 2

    def update(self, player_x, player_y):
        if self.x < player_x:
            self.x += self.speed
        elif self.x > player_x:
            self.x -= self.speed

        if self.y < player_y:
            self.y += self.speed
        elif self.y > player_y:
            self.y -= self.speed

    def draw(self):
        print(f"Enemy at ({self.x}, {self.y})")

# プレイヤーの座標を想定
player_x, player_y = 100, 100
enemy = Enemy(50, 50)

for _ in range(10):
    enemy.update(player_x, player_y)
    enemy.draw()

プレイヤーを自動で追跡する敵AIの基本形!
この形を発展させて、攻撃や逃走のロジックを追加すれば、もっと賢い敵が作れます。


4. AIを作るときのポイント

「完璧なAI」より「楽しいAI」を目指す
→ ゲームのAIは「プレイヤーにとって楽しい相手」であるべき。
→ 例えば、少しミスをするAIの方が、対戦が白熱することが多い。

処理の重さに注意する
→ パスファインディング(A*)を多用しすぎると、ゲームが重くなる。
→ 必要な場面だけ計算するように最適化する。

デバッグ用の「AI可視化ツール」を作る
→ 敵の移動ルートや現在の状態を表示できると、デバッグがしやすい。
→ 例えば「現在の状態を画面に表示する」だけでも、バグが見つかりやすくなる。


まとめ:ゲームAIの作り方と選び方

AIの種類特徴使われるゲーム
スクリプト型決められた動きをする2Dアクション、シューティング
ステートマシン状態ごとに行動を変えるRPG、格ゲー、アクション
パスファインディング最適なルートを探すオープンワールド、RTS
ビヘイビアツリー複雑な行動を管理FPS、ステルスゲーム

結論:シンプルなAIから始めよう!

ゲームAIは「少しずつ改良する」のが大事!
まずは「スクリプト型」でシンプルに作り、徐々にステートマシンやパスファインディングを追加していくと、より自然で面白いAIが作れます!

あなたのゲームに合ったAIを作って、より楽しいプレイ体験を提供しましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次