【Unity】RPGを作るチュートリアルその13 魔法関連の定義データの作成

【Unity】RPGを作るチュートリアルその13 魔法関連の定義データの作成

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

第12回ではRPG内で使用する定義データのうち、アイテムに関する定義データを作成しました。アイテムの種別を判別できるようにカテゴリの定義をEnumで作成しました。

今回は引き続き定義データの実装を行います。RPGでは欠かせない特殊能力、魔法を作っていきましょう。(といっても数は少ないです)

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

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

 

前回の内容

前回はアイテムに関する定義データを実装しました。

 

魔法のカテゴリ分け

アイテムと同様に、魔法のカテゴリについても定義を作っておきましょう。今回のチュートリアルの範囲では回復魔法をひとつだけ作るのであまり意味はないのですが、回復か、攻撃か、補助か、といった区分を用意しておくと拡張時に便利です。また、移動中に使えるルーラ的な魔法も作るなら、移動中に使える、戦闘中に使える、といったフラグも用意しておくと良いかと思います。

今回のチュートリアルでは、魔法の効果は指定した1つだけの効果を発揮するようにします。回復魔法なら回復するだけ、攻撃魔法なら攻撃するだけ、といった形です。ペルソナシリーズのメシアライザーのように、味方全体のHPを回復しつつ、状態異常まで回復する、なんて複合的な効果を発揮する実装にするなら、効果の部分をリスト形式で持たせると良さそうです。魔法効果という大きな括りのクラスを作っておいて、それを継承する回復魔法の効果のクラス、攻撃魔法のクラス、といった形でリストとして順番に処理させると良いかもしれません。あるいはカテゴリごとにクラス分けしなくても、魔法効果のクラスに必要なフィールドを用意しちゃっても良いかもしれませんね。

今回は単純に魔法効果のクラスを作って、そこで設定するカテゴリに沿った処理に分岐するようにしましょう。アイテムの時と同様に、Enumで設定していきます。

Enumでは以下の項目を作成します。

  • カテゴリなし
  • 回復
  • 攻撃
  • 補助
  • 移動

実装する魔法はひとつなのでその他の項目は不要と言えば不要とは思いつつ、拡張性を考えてあらかじめ追加しています。

 

魔法の効果範囲

魔法が発動した際にどのキャラを対象にするのかも選択できるとグッド。よくある効果範囲だと、

  • 味方単体
  • 味方ランダム(複数回)
  • 味方全体
  • 敵単体
  • 敵ランダム(複数回)
  • 敵全体
  • 自分のみ

あたりがあります。複数の味方キャラがいる戦闘なら単体が対象なのか、全体が対象なのか、定義データの作成時に選択できるようにしておくと良いですね。

戦闘時に敵キャラがどのような配置になっているのかも事前に決めておくと効果範囲の種類を決めやすくなります。例えばドラクエシリーズだと同じ敵キャラのグループを対象とした魔法などもあったりします。敵がグループとして出てくるゲームというとドラクエ以外は……FC時代のウィザードリィシリーズ、GBのサガ1と2、FCの旧約メガテンからSFCの真・女神転生1と2あたりまで、とかでしょうかね。ドラクエくらいかなーと思っていたら意外とありました。

このチュートリアルではドラクエ1に倣って1対1のバトルなので、魔法は自分にかけるか敵にかけるかになります。ただ、拡張性を考えると、

  • 味方単体
  • 味方全体
  • 敵単体
  • 敵全体
  • 自分のみ

を用意しておくと後で楽ができるかもしれません。

 

Enumの作成

魔法については、カテゴリと、効果範囲のEnumを作成します。

 

魔法のカテゴリ

アイテムと同様にEnum用のスクリプトファイルを作成していきます。Projectウィンドウで「Assets/Scripts/Enums」のフォルダに移動し、空のスクリプトファイルを作成します。名前は [MagicCategory] にしました。

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

 

上からカテゴリなし、回復系魔法、ダメージを与える魔法、補助魔法、移動系魔法です。アイテムと同様に、Inspectorウィンドウではこの項目をプルダウンで切り替えてカテゴリを選択するようにしましょう。

 

魔法の効果範囲

Projectウィンドウで「Assets/Scripts/Enums」のフォルダに移動し、空のスクリプトファイルを作成します。名前は [MagicTarget] にしました。

効果範囲のスクリプトファイルの作成
効果範囲のスクリプトファイルの作成

 

上から自分自身、味方単体、味方全体、敵単体、敵全体です。影響範囲とカテゴリの組み合わせを使って、対象への効果を計算していきます。

 

魔法の定義データの作成

続いてアイテムの定義データ用のクラスを作成します。Projectウィンドウから「Assets/Scripts/Data」のフォルダに移動し、ScriptableObjectのスクリプトを作成します。名前は [MagicData] にしました。

魔法の定義データ用のクラス
魔法の定義データ用のクラス

 

魔法の定義データとして必要な項目は以下のとおりです。

  • ID
  • 名前
  • 説明文
  • 消費MP
  • 魔法効果のリスト

このチュートリアル内ではHPの増減に関する魔法のみを実装予定ですが、拡張性を考えて、上で触れたリスト形式で魔法効果を保持する形式にしちゃいましょう。リストの項目が1つであれば、発揮する効果も1つになります。

まずは戦闘の流れを作る部分に着手したいので、画面上に表示するエフェクトに関しては開発後半で入れ込んでいきましょう。どのエフェクトを再生するかを定義データと紐付ける想定でいます。エフェクトについてはPrefab化しておいて、エフェクト用のコントローラをアタッチして、再生が終わった後にコールバックしてもらうような流れにしたいと考えています。効果音もそのPrefabに含めるようにします。

 

魔法効果クラスの作成

というわけで、魔法効果を表現するクラスを作成します。こちらも「Assets/Scripts/Data」のフォルダ内で、空のスクリプトとして作成しましょう。名前は [MagicEffect] にしました。

魔法効果のスクリプトファイル
魔法効果のスクリプトファイル

 

 

魔法効果のクラスでは以下の項目を設定できるようにします。

  • カテゴリ
  • 効果範囲
  • 効果量

カテゴリを使って回復かダメージかを判定し、効果範囲で対象を特定し、効果量に応じた回復やダメージを与えるようにします。今回は対象外ですが、ステータスアップの補助魔法を作るなら、対象となるステータスも設定できると良いかと思います。直接ステータスのパラメータに影響する他に、良性ステータス異常として変化させる方法もあります。その場合はステータス異常の値をチェックボックスで選択できるようにすると良いかと思います。

これを踏まえて、作成した「MagicEffect」のクラスでは以下のように記載しました。ScriptableObject内のリストから参照するため、[Serializable]の属性もつけています。

 

魔法データクラスの実装

「MagicData」のクラスは先ほど作成してあるので、中身を記載していきます。

魔法効果のリストを作って、ゲームの実行時にforeachで処理していきます。といってもリストの中身が1つなら効果も1つになるので、基本はこの運用がメインになります。

スクリプトファイルを保存したら定義データのScriptableObjectのアセットを作成します。こちらも同じ種類のデータでまとめるため、魔法データ用のフォルダを作成しましょう。Projectウィンドウの「Assets/Data」のフォルダにて、新しくフォルダを作成します。名前は [Magic] にしました。「Magic」は不可算名詞なのでsをつけずにいきます。もし他の項目で不可算名詞なのにsをつけていてもそっと見逃してください。

フォルダの作成
フォルダの作成

 

作成した「Magic」のフォルダに移動し、コンテキストメニューの [Create] -> [Scriptable Objects] -> [SimpleRpg] -> [MagicData] からScriptableObjectのアセットファイルを作成します。

魔法データの作成
魔法データの作成

 

名前は [MagicData_0001] にしました。0埋めの桁数はゲームの規模に応じて決めると良いかと思います。私は後からIDの桁を増やして大変な思いをしたことがあるので、あらかじめ余裕を持った桁数にしています。

名前の変更
名前の変更

 

作成したデータはInspectorウィンドウから設定していきましょう。

魔法の情報を設定
魔法の情報を設定

 

作成したいのは回復魔法1つです。各項目の設定については以下のように入力しました。こちらも名前などを任意のものに変更いただいてOKです。

Magic Id 1
Magic Name ヒール
Magic Desc HPを回復させます。
Cost 3
Magic Effects 1
Magic Category Recovery
Magic Target Own
Value 30

 

消費MPや効果量については、戦闘の機能ができてから調整していきましょう。この設定が終わったら、今回の作業は完了です。

魔法を作成したので、敵キャラの行動パターンも作成できるようになりました。そのため、次回は行動パターンの定義も作っていきましょう。

 

今回のブランチ

 

まとめ

今回は定義データの作成として魔法に関する定義データを作成しました。魔法のカテゴリや効果範囲などは設定段階で選べるようにしておくと便利です。ゲームを作る時にどんな効果の魔法やスキルが欲しいのか、あらかじめ決めておくと定義データにどのような項目を盛り込むか決めやすくなります。

次回は敵キャラの行動パターンの定義を作成します。作成した敵キャラの定義データも少しいじっていきましょう。

 

     

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

CTA-IMAGE

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


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


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