【Unity】RPGを作るチュートリアルその37 戦闘機能全体の管理クラス

【Unity】RPGを作るチュートリアルその37 戦闘機能全体の管理クラス

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

第36回ではゲーム内のキー入力を検知するためのラッパークラスを作成しました。

今回はいよいよ戦闘の機能全体を管理するクラスを作成していきます。作成するクラスの繋がりを確認しつつ、まずは管理クラスの枠組みだけ作っていきましょう。

 

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

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

 

チュートリアルの一覧

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

 

前回の内容

前回はゲーム内のキー入力を検知するためのラッパークラスを作成しました。

 

戦闘関連機能の繋がり

戦闘関連の機能はかなり大きくなりそうなので、簡単ではありますがフェーズごとにどんな処理を行なって、どんなクラスを作っていくのかの概要を図にしました。

フェーズごとの処理概要
フェーズごとの処理概要

 

イベントだったり、エンカウントによって戦闘が発生したことを「BattleManager」という戦闘機能を管理するクラスに通知します。このクラスでは基本的には自前で処理を行わず、全体の進行を管理するイメージです。図ではフェーズの単位で必要な機能に分けており、戦闘のフェーズが進んでいくごとに、「BattleManager」からそれぞれの担当者に指示を出して処理を行なっていきます。処理後はまた「BattleManager」に処理結果を通知することで、「BattleManager」側で判断して次に進めていきます。

「Manager」とつくクラスは意識してそのクラス内での作業を減らしていくと良いかと思います。ひとつのクラスに何種類もの役割を持たせるとコードを書いたり保守したりするのも大変なので、役割ごとに分けていきましょう。

UIに関しては、

  • HP/MPの表示エリア
  • コマンド入力エリア
  • 敵の名前表示エリア
  • 項目選択のエリア
  • メッセージ表示エリア

の5つの画面についてそれぞれウィンドウとみなして、基本方針としてはウィンドウを制御するクラス、ウィンドウ内でUIを制御するクラスの組み合わせで実装したいと思います。

また、戦闘機能の作成中に確認を行うため、Inspectorウィンドウのトグルを切り替えることで戦闘開始の処理を呼べるようにもしておきたいと思います。動作確認もなるべく早めにできるようにします。

大まかな流れとしては上記のような形で進めていきたいと思います。個々のフェーズで必要なクラスに関しては随時追加していきましょう。

 

戦闘の機能全体を管理するクラスの作成

まずはファイルだけ先に作って、必要な処理が出てきたタイミングで内容を追記していきます。Projectウィンドウから「Assets/Scripts/Battle」のフォルダを開き、MonoBehaviourのスクリプトを作成します。名前は [BattleManager] にしました。

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

 

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

現時点では他のクラスを作っていないので、まずは「BattleManager」自身で保持する情報用のフィールドを作成しました。現在の戦闘フェーズ、選択されたコマンド、敵キャラクターのID、戦闘開始からのターン数を保持するようにしています。

敵キャラクターのIDについてはint型にしています。このチュートリアルでは1対1の戦闘にする仕様のためです。複数の敵キャラクターが出現する場合は、リスト型などに変更すると良いかと思います。

戦闘開始からのターン数は、敵キャラクターの行動パターンとしてターン数の条件を入れていることから保持するようにしています。他にも行動パターンの条件に使えそうな値があれば、フィールドとして用意しておくのも良いかと思います。

 

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

シーン内に「BattleManager」のゲームオブジェクトを作成します。Hierarchyウィンドウにて、「BattleParent」の下に新しく空のゲームオブジェクトを作成します。名前は [Managers] にしました。このゲームオブジェクトの下に管理用のクラスやコントローラ用のクラスを入れていきます。今回作成した「BattleManager」をアタッチするためのゲームオブジェクトも空のゲームオブジェクトとして作成しましょう。こちらの名前は [BattleManager] にしました。

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

 

作成した「BattleManager」のゲームオブジェクトを選択し、Inspectorウィンドウから「BattleManager」のスクリプトをアタッチします。現時点では参照をアサインするフィールドは用意していませんが、今後役割を持ったクラスが増えるにしたがってフィールドも増えていく想定です。

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

 

今回はまだ動作確認はないので、コンパイルエラーがなければ完了です。

 

今回のブランチ

 

まとめ

今回は戦闘の機能全体を管理するクラスを作成しました。戦闘のフェーズごとに行いたい処理や役割も異なりますので、そちらは個別にクラスを作って実装していきます。

次回はテスト用に戦闘を開始するための処理を作っていきましょう。付随して作成したいクラスなども多いのですが、順番に実装していきます。

     

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

CTA-IMAGE

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


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


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