ターン制戦術SRPGの作り方11 敵のターン制ストラテジーAIシステムを開発する | Unity入門の森 ゲームの作り方

ターン制戦術SRPGの作り方11 敵のターン制ストラテジーAIシステムを開発する

Unity SRPG(戦略シミュレーションゲーム)の作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この記事はターン制の戦術SRPGのプログラミング開発を解説する講座の第11回目です。

今回の記事はチェスや将棋などを含めたボードゲームやオリジナルの戦術SLGストラテジーを組む際にも役立つ内容です。

前回の記事でDoTweenのインストール方法から始まり、遅延処理の実行やアニメーションの作成方法を習得しました。Tween.Toなどを用いればHPゲージを指定した秒数で減少させたりもできました。

前回の記事:

戦略シミュレーションRPGの作り方10 DOTweenでターン制戦闘管理とアニメーションを実装
この記事はUnityとC#でSRPGの作り方を解説する講座の第10回目です。 ここまでの開発でキャラクターの移動と攻撃までが可能になりました。ターン制の戦略ストラテジーシミュレーションゲームの基盤ができてきましたね! 前回の記事: 今回はD...

ここまでの実装で、自分のターン中にキャラクターを操作し移動から攻撃まで一通り行えるようになりました。あとは敵ターンの処理を実装すればゲームの流れが出来上がります。

そこで、今回の記事ではSRPGにおける敵ターンAIストラテジーの行動・移動・戦闘処理を開発していきます。

敵AIがプレイヤーに攻撃できるかどうかや移動後に攻撃できない場合はどうするかといった例外処理も含めた実践的なAIストラテジーを開発していきます。


【Line登録者限定のプレゼントもあるよ!】

敵AIの行動ストラテジー処理の開発方針について

条件に沿って敵キャラクターの1人を行動させるメソッドを作成します。広義におけるAIの実装となります。

今回は以下のような仕様でシンプルに制作します。

  1. 敵フラグの立っているキャラクター1人を対象にする
  2. その敵の移動範囲を取得する
  3. 移動範囲内の位置1つごとに攻撃範囲を取得する
  4. 攻撃範囲内の位置1つごとに攻撃できるキャラクターが居るかチェックし、居るなら攻撃してターン終了
  5. 全キャラクターで探索を行っても攻撃相手が居ないなら何もせずターン終了

移動範囲や攻撃範囲の検索はプレイヤー操作の時と同じものを使用できます。

GameManager.cs内 新規メソッド
  • 遅延実行を用いて移動の後に攻撃を行うようにしています。
  • CharaAttackメソッド内にて攻撃後のターン切り替え処理を実装済みなので、攻撃が完了したら自動的にプレイヤーのターンが始まります。

このメソッドを「敵のターンに切り替わった」タイミングで1度呼び出すようにします。今回はその方法として以前に用意したChangePhaseメソッドを拡張します。

GameManager.cs内 ChangePhase

この拡張によって「プレイヤーキャラの攻撃後」「プレイヤーキャラの待機後」両方できちんと先ほどのメソッドが呼ばれるようになります。

 

それではテストプレイを行い、自分のターン→敵のターン→自分のターン… と相互に切り替わっていく所まで確認していきましょう。

ターン切り替え時に演出を追加する

シミュレーションRPGとして演出面を強化する為、ターン切り替えのタイミングで画面上に専用のロゴを表示してみましょう。

まずはプレイヤーのターン切り替わった事を示すロゴから制作します。

Canvas内に画像UIとしてUI>Imageで追加しましょう。名前はLogo_PlayerTurnとしました。(任意でロゴ系の親になるオブジェクトLogosを追加しておいても良いでしょう。)

Imageコンポーネントの[Source Image]には画像素材PlayerTurnを指定します。

素材を指定した後にコンポーネント下部にある[Set Native Size]ボタンを押すと、画像の大きさに合わせてRectTransformのWidth・Heightを自動調整してくれます。

また、このUIは画像の透明化・非透明化によって表示と非表示を切り替えていくのでオブジェクトは常にアクティブで存在し続ける事になります。ブロックへのタップがこのUIにブロックされる事を防ぐ為に、[Raycast Target]の設定をオフにしておきましょう(Raycast TargetをOffにしておけばUIの当たり判定が実行されない)。

初期状態は非表示とする為、[Color]パラメータのA(Alpha…不透明度)の値を0にしておきます。

画面中央に配置するのでアンカーや座標の変更は不要です。

これでプレイヤーのターン開始表示のUIが作成できたので、オブジェクトをコピー&ペーストして敵ターン開始表示のUI(Logo_EnemyTurn)も用意しておきます。画像素材はEnemyTurnを使用します。

大体このようになっていればOKです。

ロゴ画像の表示アニメーションを作成・呼出する

以上の画像UIをターン切り替え時に表示していくようにしましょう。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

まとめ

自分のターン→敵のターン→自分のターン… の繰り返しの流れが一通り出来上がりました。

敵のAI部分であるTargetFinderクラスを拡張していけばより賢い行動をとってくれるようになるので興味のある方はぜひ試してみてください。

(例:ActionPlan型に戦闘結果の予測まで記録するようにし、最も与ダメージの大きい行動プランを採用するように変更する等…)

 

ゲームの完成が近づいてきました。次の記事ではこのゲームをより遊びやすく・より面白く改良していきます。

次の記事:

SRPGの作り方12 スマホアプリ化対応カメラ移動・属性システム・BGMと効果音の開発
この講座はUnityとC#で作るSRPGのプログラミング開発講座の第12回です。 前回の記事で敵の行動AIパターンやターン変更システムの実装まで完了し、一通り最低限の形でターン制戦略シミュレーションゲームが遊べるようになりました。 前回の記...

Unity SRPG(戦略シミュレーションゲーム)プログラミング講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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