【Unity】RPGを作るチュートリアルその59 戦闘の行動を処理する機能を実装

【Unity】RPGを作るチュートリアルその59 戦闘の行動を処理する機能を実装

シンプルなRPGをUnityで作るチュートリアルシリーズの59回目です。

第58回では行動全体を管理するクラスから、各行動を処理するクラスに対する呼び出し部分を作成しました。

今回は戦闘機能全体を管理するクラスにて、ユーザが選択したコマンドに応じた行動を登録し、それを処理していく部分を作成していきます。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。

 

チュートリアルの一覧

このシリーズ全体の一覧は以下のページにまとめています。

 

前回の内容

前回は行動全体を管理するクラスから、各行動を処理するクラスに対する呼び出し部分を作成しました。

 

行動に関する処理の全体像

 

戦闘中の行動処理の概要
戦闘中の行動処理の概要

 

戦闘中の行動処理については、全体の制御を「BattleActionProcessor」で行なって、攻撃や魔法などの個別の行動の処理については、それぞれクラスを追加してそちらで処理させていきます。これらのクラスについては実装が終わり、「BattleActionProcessor」側からも各行動を処理するクラスへの呼び出しを実装しました。

あと実装したい部分として、「BattleManager」にて、選択されたコマンドに応じた行動を登録する点と、実際に行動を処理していく部分があります。

追加したい部分としては、

  • 各コマンド入力に応じた行動の登録処理の追加
  • 敵味方のコマンド入力が完了後に行動の開始処理を追加

です。

うまくいけばコマンド入力に対応したアクションが行われるはず……! と信じて実装していきましょう。

 

BattleManagerの修正

前述の項目をコードに落とし込んでいきます。変更する箇所も多いので、ちょっと長いですが全文を掲載した後、個別に説明を行いたいと思います。

 

各コマンド入力に応じた行動の登録処理の追加

コマンドのハンドリング部分

既存のHandleCommand()のメソッドで、コマンドごとの分岐を行なっていた部分で、攻撃コマンド、逃げるコマンドの場合にコマンドに対応する行動を登録する処理に進むようにします。魔法コマンドとアイテムコマンドはこれまで同様、選択ウィンドウを表示する処理に進みます。

 

選択ウィンドウの処理

OnItemSelected()にて、選択ウィンドウで項目を選択した後の処理を分岐させます。攻撃コマンド、逃げるコマンドと同様に、各コマンドを行動として登録する処理に進みます。

また、OnItemCanceled()のメソッドで、選択ウィンドウでキャンセルした場合にウィンドウを消す処理が入ってなかったのでこちらも修正させてください。

 

コマンドの登録処理

各コマンドについて行動の登録用メソッドを作成しました。「BattleActionRegister」の登録処理で各コマンドに対応するものを呼び出します。今回は味方が一人なので、行動者のIDはパーティの戦闘にいるキャラクターのIDを使います。

各登録処理が終わったら、コマンド選択後の処理であるPostCommandSelect()を呼び出します。このメソッドでは、敵キャラクターのコマンドを決定する処理を以前実装してあるので、そのまま使っていきましょう。

 

敵味方のコマンド入力が完了後に行動の開始処理を追加

敵キャラクターのコマンド入力が完了した後はOnEnemyCommandSelected()のメソッドが呼ばれる流れにしてあったので、そのメソッド内で行動開始用メソッドのStartAction()を呼び出します。

StartAction()の中ではフェーズを切り替えて、メッセージウィンドウを表示するようにします。準備ができたら「BattleActionProcessor」のStartActions()を呼び出して行動フェーズを開始します。

 

動作確認

スクリプトを保存したら行動フェーズが想定通りに動くか確認してみましょう。各コマンドを選択して、動作するか確かめていきます。

攻撃コマンドの場合は以下の画像のように攻撃者の名前、ターゲットの名前、ダメージ量が表示されることを確認します。攻撃によって敵キャラクターを倒した場合は、戦闘終了の処理をまだ作成していないことからコンソールに出力されるメッセージを確認しましょう。

行動の流れの確認
行動の流れの確認

 

魔法コマンドの場合は、行動者、魔法名、ターゲット、回復量が表示されることを確認します。また、左上のステータス表示ウィンドウで回復後のHP、消費後のMPに更新されることを確認します。魔法の場合は次のターンに進む動作を確認できるので、行動後に再度コマンド入力フェーズに移行することも確認しましょう。

魔法の確認
魔法の確認

 

アイテムコマンドの場合は、行動者、アイテム名、ターゲット、回復量が表示されることを確認します。また、魔法の時と同様に左上のステータス表示ウィンドウで回復後のHP更新されることを確認します。

アイテムの確認
アイテムの確認

 

逃げるコマンドの場合は、逃走に成功した時に逃走成功と戦闘終了のメッセージがコンソールに表示されることを確認します。逃走に失敗した場合は、画面上に回り込まれたメッセージが表示された後、敵キャラクターの行動後にコマンド入力フェーズに移行することを確認します。

逃げるコマンドの確認
逃げるコマンドの確認

 

ここまでの動作が確認できたら今回は完了です。行動関係の処理をまとめて実装したので確認項目が多くなってしまいましたが、それぞれ確認できると戦闘関連の処理は(精神的に)9割方終わったも同然です。もし参照切れ等があったら都度確認していきましょう。

 

今回のブランチ

 

まとめ

今回は戦闘機能全体を管理するクラスにて、ユーザが選択したコマンドに応じた行動を登録し、それを処理していく部分を作成しました。流れを確認できるようになると、戦闘の機能の実装も大分進んだ感じがします。

次回は戦闘終了の処理を作成していきましょう。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!