【Unity】3DダンジョンRPGの作り方 第8回|バトルコマンドと攻撃システムの実装 | Unity入門の森 ゲームの作り方

【Unity】3DダンジョンRPGの作り方 第8回|バトルコマンドと攻撃システムの実装

Unity 3DダンジョンRPGの作り方 ~世界樹・ウィザードリィ風ゲームを作ろう~

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

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

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第8回目になります。

前回はカウントタイムシステムを実装し、速度から行動値を計算してキャラクターにターンをまわす処理まで実装しました。

前回の記事:

【Unity】3DダンジョンRPGの作り方 第7回|カウントタイムバトルシステムの実装
この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第7回目になります。前回はアクターとエネミーが戦闘中に使用するスキルの実装を行いました。前回の記事:ここからはこのゲームの戦闘システムにおいて重要になるCTB(カ...

今回はバトルに用いるコマンドUIの実装やアニメーション作成、アクターキャラクターの通常攻撃によって敵のHPを減少させる処理まで実装していきます。

【ゲームの作り方講座プレゼント中!】

バトルコマンド・対象選択システムをUnity C#で実装

このゲームではアクターにターンがまわってくると戦闘画面右上にコマンドボタンが並んで表示されます。

このうち「ATTACK」ボタンを押下すると通常攻撃スキルを発動できます。

そして攻撃対象となるエネミー1体を選択するとスキルの効果処理が行われ、そのエネミーのHPを減らすという処理が行われます。HPが0になったエネミーは戦闘不能となり、戦闘から退場します。

この章ではここまでの実装を目標にしていきます。

アクター用バトルコマンドUI処理クラス作成

戦闘画面右上に表示するコマンドボタン群(バトルコマンドと呼称)の1つ1つにアタッチする用のクラスとしてBattleCommandUIを作成します。BattleManagerから制御されます。

BattleCommandUI.cs

それぞれのバトルコマンドUIに対して、そのUIがどのコマンドと紐づいているかを指定できるようにし、その情報に基づいたメソッドを呼び出せるようにします。

 

OnPointerClickメソッドは、そのUIオブジェクトがマウスでクリックされる(またはスマートフォンでタップされる)時に呼び出される処理です。この機能を利用する場合はクラス名を宣言する箇所でIPointerClickHandlerの継承が必要になります(10行目)。

ちなみにここでいうクリックとは「UIオブジェクトでマウスを左ボタンを押し込み、そして離す」操作をすることでクリックと判定されます。今回は使いませんが、OnPointerDownというメソッドの場合はマウスの左ボタンを押し込まれたタイミングで呼び出されます。(こちらはIPointerDownHandlerが必要)

 

またUnityのUIにおいてマウスクリックorタップの判定をとりたいだけの場合はButtonというコンポーネントも利用できます。これはのちほど解説します。

BattleManager.cs (一部省略)

バトルコマンドに関する処理、および通常攻撃コマンドが選択された時に呼び出されるメソッドを形だけ用意しておきます。

 

戦闘開始時は各バトルコマンドUIのオブジェクトを非アクティブにすることでボタンを非表示にしておきます。

バトルコマンドはあくまでアクターの行動選択用なので、アクターのターン開始時にのみ表示すれば良いためです。

プレハブへの設定など

まずはBattleCommandUIプレハブの設定をInspectorから確認します。

こちらは元々Buttonコンポーネントとして作成されているので、Imageコンポーネントの下にButtonコンポーネントも同時に付与されているはずです。

Buttonコンポーネントについて

(ここで説明するButtonコンポーネントについては説明のみですので、実際に操作する必要はありません。)

もし上記のBattleCommandUIクラスを使わずにBattleManagerクラスのActorCommand_NormalAttackメソッドを呼び出したい場合、
OnClick()パラメータの[+]をクリックし、Scene上のManagersオブジェクトに対する参照をセットします。
そしてBattleManagerクラスのActorCommand_NormalAttackを選択すると、そのUIをクリックした時にここで指定したメソッドを呼び出してくれるようになります。

(プレハブ編集画面ではシーン上のオブジェクトを参照にとれないので、一度プレハブ編集画面から出て、シーン上のBattleCommandUIオブジェクトに対してこの設定をする必要があります。勿論この場合プレハブ自体への設定は変更されません。)

ただし、このButtonコンポーネントは「クリックやタップを検知して処理を呼び出す」という最低限の機能しか持ち合わせていないので、もう少し複雑な動作やアニメーションを付与したい場合は自分でスクリプトを作成する必要があります。そこで作ったのが先ほどのBattleCommandUIクラスという訳です。

Buttonコンポーネントの削除とBattleCommandUIのアタッチ

それではBattleCommandUIプレハブの編集画面に戻り、Buttonコンポーネントタブ右上にある縦向きの[…]ボタンをクリックし、Remove Componentを選択します。これでコンポーネントの削除が可能です。

あとはBattleCommandUIをアタッチすればOKです。

プレハブ編集画面はここまでです。元のシーンに戻りましょう。

Managersオブジェクトの設定

ManagersオブジェクトのBattleManagerコンポーネントからも各種参照をセットします。

BattleCommandUIAreaに対する参照、および5つあるバトルコマンドUIへの参照です。

現時点でテストプレイをすると、戦闘開始時に画面右上のバトルコマンドが全て非表示になっていることを確認できます(バトルコマンドを再表示する処理はこのあと作成します)。

戦闘のステート進行管理システムを実装する

ここまでの実装でキャラクターにターンが回ってくるようになりました。次はそのターン中に行う「コマンドを選ぶ」「スキルを選ぶ」「相手を選ぶ」「行動する」といった一連の流れを管理する仕組みを実装していきます。

戦闘中のプレイヤーの行動は、例えば「コマンド選択画面で攻撃を選んだら、次に対象選択画面に移る」といったように状況に応じて次にできることが決まっています。このようにゲームの「現在の状況」を管理し、その状況に応じて処理を切り替える仕組みをステート管理(または状態管理)と呼びます。

ステート管理とは

ステート管理を導入することで複雑な処理の流れを整理し、コードをわかりやすく保つことができます。

例えば今回の戦闘システムでは以下のような「状況(ステート)」が考えられます。

  • Wait: 誰のターンでもなくゲームの進行を待っている状態

  • SelectingCommand: アクターのターンで、どのコマンド(攻撃・スキルなど)を実行するか選択している状態

  • SelectingTarget: コマンドやスキルを選んだ後、どの相手に使うか選択している状態。

  • Action: 実際にスキルなどの行動が実行されている状態。

このように戦闘の流れをいくつかのステートに分割し、「今どのステートにいるのか」をenum変数で管理します。そしてその値に応じて表示するUIを切り替えたり、プレイヤーの入力を受け付けたりする処理を変化させます。

ステート管理スクリプトの実装

BattleManagerクラスを拡張し、ステート管理の機能を付与しつつ通常攻撃のコマンドボタンを押下できる所までを実装します。

BattleManager.cs

続きを読む

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

まとめ

戦闘全体の進行管理を行うステート機能およびスキルの対象選択、効果発動までの処理を実装しました。

次回はエネミー側の行動処理を実装しつつ、一部の未実装となっている戦闘まわりのシステムを拡充していきます。

次の記事:

【Unity】3DダンジョンRPGの作り方 第9回|エネミーAI・オートバトルシステムの実装
この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第9回目になります。前回は戦闘のステート管理などを実装し、アクターの通常攻撃スキルを使用できるところまでを実装しました。前回の記事:今回はエネミーもスキルを発動し...

Unity 3DダンジョンRPGの作り方講座に戻る >>

 

【ゲームの作り方講座もプレゼント中!】

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

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

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

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