【Unity】RPGを作るチュートリアルその54 攻撃に関する行動を処理するクラス

【Unity】RPGを作るチュートリアルその54 攻撃に関する行動を処理するクラス

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

第53回では行動選択を行うクラスを実装しました。

今回は各行動を処理するクラスのうち、攻撃の行動を処理するクラスを実装していきます。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

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

 

チュートリアルの一覧

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

 

前回の内容

前回は行動選択を行うクラスを実装しました。

 

攻撃に関する行動を処理するクラス

 

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

 

戦闘中の行動処理については、全体の制御を「BattleActionProcessor」で行なって、攻撃や魔法などの個別の行動の処理については、それぞれクラスを追加してそちらで処理させていきたいと思います。

今回は攻撃に関する行動を処理するクラスを実装していきます。

また、各行動処理のクラスで共通してメソッドを実装するように、インタフェースを実装していきます。このインタフェース自体は、第49回で実装済みなので、こちらもご参照ください。

 

攻撃に関する行動を処理するクラスの作成

スクリプトファイルを作成していきましょう。

  • 処理内で必要な参照用フィールド
  • セットアップ用メソッド
  • 行動を処理するメソッド
  • メッセージの表示を制御するメソッド

を実装していきたいと思います。セットアップ用のメソッドと行動を処理するメソッドはインタフェースによって強制されるものです。

Projectウィンドウから「Assets/Scripts/Battle/Action」のフォルダに移動し、MonoBehaviourのスクリプトファイルを作成します。名前は [BattleActionProcessorAttack] にしました。

スクリプトファイルの作成
スクリプトファイルの作成

 

作成した「BattleActionProcessorAttack」の中身は以下のように記載しました。

フィールドとしては、必要なクラスへの参照を保持するようにしています。攻撃を行う際には、攻撃後のステータスで画面描画を更新したり、敵キャラクターの画像を消したりと、別のクラスの機能が必要になるので、そちらのメソッドを呼び出せるように参照用フィールドを用意しています。

SetReferences()の中でそのフィールドに対して参照をアサインしていて、「BattleManager」を通して参照を取得するのがメインになっています。

ProcessAction()では引数の行動をもとに、攻撃の行動を処理していきます。メッセージを表示するコルーチンを起動する前に、パラメータをもとにダメージ計算を行い、データ上で反映しています。

ShowAttackMessage()のコルーチンでは攻撃用のメッセージを順番に表示していきます。「BattleActionProcessor」のSetPauseMessage()のメソッドを呼び出してポーズフラグをtrueにして、メッセージ生成処理後にwhile文で待つことで、次のメッセージ表示までの表示間隔を制御しています。while文の条件である「IsPausedMessage」は、メッセージ表示が終わった後のコールバックで「BattleManager」から「BattleActionProcessor」に通知されることで、切り替えが行われます。

攻撃を受けてやられた場合のメッセージは敵と味方で異なるので、攻撃を受けた側の味方フラグを確認して処理を分けています。味方がやられた場合は「BattleManager」のゲームオーバーになった時のコールバックを呼びます。このメソッドはこの後実装しましょう。

敵がやられた場合は、敵パーティ全体の撃破フラグと逃走フラグを確認して、戦える敵がいなくなった時に「BattleManager」の敵をやっつけた時のコールバックを呼びます。こちらも後ほど実装しましょう。

 

既存のクラスの修正

今回実装した機能と繋ぎ合わせるため、既存のクラスも修正していきます。対象は、

  • BattleManager

です。

「BattleActionProcessor」に対する機能追加は4つのクラスが実装できてから行います。

 

BattleManagerの修正

「BattleManager」では

  • ステータスの値を更新するためのメソッドを追加
  • 敵を全て倒した時のコールバックメソッドを追加
  • ゲームオーバーになった時のコールバックメソッドを追加

を行います。

以前追加したOnEnemyCommandSelected()のメソッドの後ろにメソッドを3つ追加しました。

OnUpdateStatus()はステータス画面の再描画処理を呼び出します。味方キャラクターがダメージを受けたり、魔法やアイテムでHPを回復したタイミングで呼び出すようにしたいと思います。今回の攻撃の行動を処理するクラスの場合、ダメージを受けた時に更新するようにしています。

OnEnemyDefeated()は敵を全て倒した時に呼ばれる処理、OnGameover()は味方が全員やられた時に呼ばれる処理です。といっても1対1の戦いなので、やられた方の処理が呼ばれるイメージです。現時点ではフェーズの切り替えのみ行なっていますが、戦闘終了の処理を行うクラスを実装するときに、対応するメソッドを呼び出す処理を入れる予定です。

 

スクリプトのアタッチ

スクリプトを保存したら、ゲームオブジェクトの作成してスクリプトをアタッチしましょう。

 

BattleActionProcessorAttackのアタッチ

Hierarchyウィンドウから「BattleParent」の下にある「Managers」から、「BattleActionProcessor」のゲームオブジェクトを選択します。「BattleActionProcessor」の下に、空のゲームオブジェクトを作成しましょう。名前は [BattleActionProcessorAttack] にしました。

ゲームオブジェクトの作成
ゲームオブジェクトの作成

 

Inspectorウィンドウで今回作成した「BattleActionProcessorAttack」をアタッチします。

スクリプトのアタッチ
スクリプトのアタッチ

 

動作確認については、行動関係のクラスができたタイミングで行いましょう。

 

今回のブランチ

 

まとめ

今回は各行動を処理するクラスのうち、攻撃の行動を処理するクラスを実装しました。

次回は魔法の行動を処理するクラスを実装していきます。

     

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

CTA-IMAGE

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


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


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