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

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

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

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

今回は同様に各行動を処理するクラスのうち、魔法の行動を処理するクラスを実装していきます。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

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

 

チュートリアルの一覧

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

 

前回の内容

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

 

魔法に関する行動を処理するクラス

 

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

 

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

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

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

 

魔法に関する行動を処理するクラスの作成

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

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

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

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

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

 

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

フィールドとしては、必要なクラスへの参照を保持するようにしています。こちらに関しては攻撃の行動処理クラスとほとんど同じです。今回のチュートリアルの範囲では攻撃魔法を作成しないので、敵キャラクターのスプライトを非表示にする機能は使わないことから、スプライト管理のクラスへの参照は入れていません。また、複合的な魔法効果を処理できるように、魔法効果のポーズフラグも用意してあります。

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

ProcessAction()では引数の行動をもとに、魔法の行動を処理していきます。メッセージを表示するコルーチンを起動する前に、MPを消費させる処理を行なっています。

ProcessMagicActionCoroutine()では定義データで設定された魔法効果ごとに処理を行なっていきます。例えばHPを回復しつつ、毒状態を回復する、みたいな魔法も実現できるようにしています。チュートリアルの範囲ではその魔法を作っていませんが、拡張することを考えてこのような形にしています。

魔法を唱えたのが味方か、魔法の効果の対象が味方か、によって処理が分岐するため、少々煩雑になっていますが、定義データで設定したもの処理できる形にしています。今回のチュートリアルでは回復魔法のみ作ってあるので、それ以外は未定義の魔法として分岐させています。効果を追加する場合はこの分岐を増やしたり、別メソッドに分けて作っていくことを想定しています。

魔法の効果ごとに表示するメッセージの種類も異なるので、それに合わせてコルーチンを作っています。回復魔法に対してはShowMagicHealMessage()のコルーチンが対応します。攻撃の行動処理と同様に、「BattleActionProcessor」のポーズフラグを使ってメッセージ表示の待ち合わせを行なっています。魔法の効果ごとにポーズしているため、メッセージ表示後は魔法効果のポーズフラグをfalseにして次に進むようにしています。

効果範囲に関しては、IsMagicTargetFriend()のメソッドを使って判断しています。魔法の効果範囲も自分自身、味方単体、味方全体、といった感じで選択できるようにしているので、味方が対象になっているかを確認するようにしています。チュートリアルでは1対1のためこのメソッドを使っていますが、拡張時は効果範囲に応じて変更するとグッド。

 

スクリプトのアタッチ

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

 

BattleActionProcessorMagicのアタッチ

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

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

 

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

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

 

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

 

今回のブランチ

 

まとめ

今回は魔法の行動を処理するクラスを実装しました。魔法は効果が多岐に渡るので、魔法だけでもカテゴリごとにさらにサブクラスを作っても良いかもしれません。

次回はアイテムに関する行動を処理するクラスを実装していきます。

     

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

CTA-IMAGE

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


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


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