Unity SRPGの作り方15 戦闘時の特技スキル バフ・デバフ・回復・遠隔魔法を開発

Unity SRPG(戦略シミュレーションゲーム)の作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この講座はUnityとC#で作るタクティクス戦略シミュレーションRPGの作り方について解説する講座の第15回です。

前回でターン制ストラテジーシステムのゲーム管理処理(ゲームオーバー・ゲームクリア等)を実装し、繰り返し遊べるようになりました。

前回の記事:

タクティクスシミュレーションRPGの作り方14 ゲームクリア・ゲームオーバー・フェードインを開発
この記事はUnityを用いたターン制のタクティクスシミュレーションゲームのプログラミング開発講座の第14回です。 前回の記事でキャラクターの移動パターンを増やし、コマンドキャンセル処理を実装しました。かなり戦術面を向上させたゲームを作るこ...

前回までに完成させたこのゲームをさらに充実させるために追加要素を実装していきます。ここでさらに本格的なSRPGに仕上げていきましょう。

今回は味方のキャラクターごとに個別の特技スキルを付与し、攻撃の代わりのコマンドとして使用できるようにします。スキルを作ることで各キャラクターごとに個性を持たせ、戦略性をグッと高めることが可能です。

回数制限型の強化攻撃・バフ・デバフ・回復魔法・遠隔攻撃とSRPGで作りたくなる代表的なスキルを開発していきます。


【Line登録者限定のプレゼントもあるよ!】

辞書型とstaticクラスと列挙体で特技を定義する

まずは実装したい特技の名称を定義してから処理に組み込んでいく流れになります。

サンプルでは味方の数は3人なので3つ分の特技を用意すればOKですが、オマケとして以下の4つの実装方法を紹介していきます。

特技 定義名 説明
会心の一撃 Critical ダメージが2倍になる攻撃(1回しか使えない)
シールド破壊 DefBreak 攻撃対象の防御力を0にする(特技を発動した戦闘のダメージは0)
ヒール Heal 攻撃対象のHPを回復する(回復量はAtkの半分)
ファイアボール FireBall 位置関係を無視して任意の敵をダメージ半減で攻撃する

これらをどこで定義するかについては、11章で学んだようなstaticクラスを作成してその中に列挙型での定義と特技名までを設定していきます。

それではスキル定義専用のクラスSkillDefineを作成します。

staticクラスでの定義ですので、このスクリプトをシーン内のオブジェクトにアタッチする必要はありません。また、この定数値を他のクラスから参照する時にもクラス名を書くだけでOKになります。

さて、今の状態ではあくまで定数値ですので数字の情報しか持っていません。ゲーム上では特技名と説明文もあわせて表示したいので、「定数値と名前」「定数値と説明文」をそれぞれ紐づける何かがあると便利ですね。

C#ではその方法の1つとしてDictionary(辞書型)というものが存在します。DictionaryではKey値とValue値をセットで配列に定義する事ができ、Key値を渡せばそれに対応するValue値が返ってくるというものになります。

この2つは異なる型であっても良いため、Keyを上記のSkill型でセットして名前や説明文をstring側でvalue側にセットすれば紐づけが完了します。

この実装によって、例えばdic_SkillName[Skill.Heal]と呼べば「ヒール」の文字列が返ってくるようになりました。

関連記事:辞書(ディクショナリー)の使い方 キーと値でデータを指定する

味方キャラクターに特技を割り当てる

定義が完了したらキャラクターそれぞれに特技を持たせておきます。データに変数を追加しInspectorから指定していきましょう。

Character.cs内 メンバ変数宣言部

例では以下のような割り当てにしましたが、確認の際は自由に切り替えて試すと良いでしょう。

  • 勇者:会心の一撃
  • 戦士:シールド破壊
  • 魔法使い:ヒール

特技を発動できるようにする

特技の発動は既に存在するコマンド「攻撃」「待機」に追加する3つ目の行動となります。まずはGUI上に特技ボタンを配置しましょう。

攻撃や待機のボタンUIをコピー&ペーストし、画面の左下に配置します。(Anchorも左下を基点に合わせるようにしましょう。)オブジェクト名はSkillCommandとしました。

続いて特技の名前と説明文を表示するTextUIオブジェクト(SkillText)を作成します。Canvasの子オブジェクトとして作成しましょう。ボタンよりも右側の位置に、多少文字数が多くなっても問題なく表示できるように設定しましょう。

文章については、特技名を書いた後に改行して説明文までを全てこのUIで表示します。この特技名を表示する部分のみフォントサイズを大きくする方法があるのであわせて実装すると以下のような表示内容になります。

文章内を<size=(大きさ)></size>で囲うとその部分のみ指定の大きさに変化します。このような機能をRich Textと呼び、他にも以下のような種類があります。

  • <b></b> … 囲った部分が太字になります。
  • <color=(色コード)></color> … 囲った部分の文字色が変わります。

スクリプトで説明文を表示する

それではGUIマネージャ側から特技ごとに文章を分けて表示できるようにしましょう。表示内容の変更は全コマンドボタンが表示されるタイミングで行えばOKです。

GUIManager.cs

Inspectorから説明文UIの参照をセット(SkillText)するのと同時に特技ボタンUIの参照もセット(SkillCommandButton)しておきます。こちらは後ほど特技の使用可否を実装する時に扱います。

コマンドボタン表示メソッドShowCommandButtonsに渡すべき引数が増えたのでゲームマネージャ側も修正しておきます。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.stores.jp/)で講座閲覧権を取得してね。

SRPGのバフ・デバフ・回復・遠隔攻撃処理の作り方まとめ

以上4種の特技の実装が無事終わりました。対象を選ぶタイプの特技ならこのように拡張していけば簡単に実装できるので是非オリジナルの特技も開発してみてください!

また敵のAIを拡張すれば敵にも特技の発動を行わせる事が出来るようにもなります。こちらもやる気があればチャレンジしてみるのも良いでしょう。

 

次回はいわゆる周回要素として、ゲーム終了後にキャラクターの能力を上昇させられるシーンを作成します。

また、その上昇状態をゲームを閉じても保持する機能もあわせて実装していきます。

次の記事:

Unity タクティクス戦略SRPGの作り方16 周回レベルアップとシーン間でのデータ引継ぎ
この記事はUnityとC#で作るターン制のタクティクス戦略シミュレーションRPGプログラミング開発講座の第16回です。今回が講座内容としては最終回になります。 前回の記事でキャラクターの特技スキルを実装し、バフやデバフ・回復や強力な攻撃ス...

Unity SRPG(戦略シミュレーションRPG)の作り方講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました