【Unity】3DダンジョンRPGの作り方 第6回|スキルシステムとダメージ処理の実装 | Unity入門の森 ゲームの作り方

【Unity】3DダンジョンRPGの作り方 第6回|スキルシステムとダメージ処理の実装

Unity 3DダンジョンRPGの作り方 ~世界樹・ウィザードリィ風ゲームを作ろう~

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第6回目になります。

前回は戦闘シーンに敵キャラクターやプレイヤーパーティーのデータクラスを構築し、Scriptable Objectを用いてステータス管理を行う方法を学びました。

また、キャラクター表示システムも完了し、本格的なアクティブタイムバトルシステムの実装に取り掛かってきました。

前回の記事:

【Unity】3DダンジョンRPGの作り方 第5回|キャラクターデータと戦闘システムの実装
この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第5回目になります。前回は戦闘画面用のシーンを新規作成し、そこで表示するUIオブジェクトを用意していきました。前回の記事:ここからは主にスクリプトを拡張し、戦闘シ...

今回は通常攻撃のコマンドやスキルを実装し、相手のHPを削ることができる状態を目標に開発を進めていきます。単体攻撃だけではなく全体攻撃やランダム攻撃、前衛に当たりやすい攻撃など多種多様な設定を含めていきます。

【ゲームの作り方講座プレゼント中!】

キャラクタースキル実装

戦闘中にアクター・エネミーがとる行動は基本的にスキルとして実装します。スキルには攻撃するものや状態異常を付与するもの、回復するものなど様々な効果があります。

そしてそれらの効果にも共通の機能をもつものがあります。

例えばアクターの攻撃スキルは「エネミーにダメージを与える効果」を共通で持ちます。そのダメージの大きさはスキルによって異なるでしょうが、アクターの攻撃力や魔法攻撃力を参照してダメージを計算し、エネミーのHPを減少させる処理は同じものが使えます。

 

各スキルの名前や効果などのデータ作成はScriptableObjectにて行うことにします。

そのスキルデータのInspectorでの設定において、どのような効果をどれくらいの効果量で発揮できるかを指定できる状態を目標に実装していきましょう。

 

また一部のスキルは「エネミーにダメージを与えつつ、確率で毒状態を付与する」のように複数の効果を同時に設定できるようにしたいです。これもエディタ拡張を活かすことで機能として実現します。

 

多様なスキルの作り込みは講座の後半で行います。当面はカウントタイムバトルの実現のために最低限必要になる通常攻撃スキルのみを作っていきます。

ダメージ計算なども行わず、固定の数値を相手のHPから減らすような内容にします。

スキル効果クラス・HPへのダメージ処理実装

スキルの実装はおもに以下の2クラスを作成して行います。

  • SkillData.cs:スキル名や効果、使用できる対象や消費TPといったスキルデータを登録できるScriptableObject
  • SkillEffect.cs:各スキル効果の使用時の処理を担当

まずはSkillEffectクラスから作成していきます。

スキル使用時に呼び出されるメソッドは全スキルで共通化したいため、ここでもクラスの継承を用います。

SkillEffect.cs (新規)

全スキル効果クラスの基底クラスとなるSkillEffectを作成し、それをもとに「相手にダメージを与える効果」を扱うDamageEffectクラスを作成しています。

戦闘中に使用される場合はApplyEffectToTargetメソッドが呼び出されます。スキルを使用するキャラのデータおよび対象となるキャラのデータがそれぞれ引数で渡されるので、それをもとにダメージ計算を行ってHPに反映させます。

 

HPの変更はBattleManagerクラスを介して行う形にします。こうすることで後々演出などを追加しやすくなります。よってBattleManagerクラスとCharacterDataクラス、ActorUIクラスを引き続き編集していきます。

BattleManager.cs

このあとCharacterDataクラスに追加するHP変更処理を呼び出し、あわせて戦闘不能時(HPが0になった時)に呼び出す処理についても用意しておきます。

戦闘不能になるとそのCharacterDataのisKnockedOutフラグがtrueになり、ターンがまわってこなくなるなどの処理がこれから追加されていきます。

CharacterData.cs

HPとTPの変更処理、今は使用しませんが全回復の処理まであらかじめ用意しておきます。

ActorUI.cs

こちらも今すぐに特別な処理を行うことはありませんが、キャラクターが戦闘不能になった時に処理や演出を行うメソッドも用意しておきます。

戦闘不能になると名前を赤色で表示して分かりやすくなるようにします。

 

4クラスの編集によって、DamageEffectクラスのApplyEffectToTargetメソッドを呼び出すことにより対象キャラクターのHPを減少できるようになりました。

日本語・英語の文章設定機能

引き続きスキルデータの実装に移りますが、その前にこのゲームに言語設定を反映できるよう準備を進めておきます。

このゲームは日本語と英語の2言語の表示に対応しているので、現在の言語設定をDataクラスから取得し、それに応じた文章をスクリプトから設定できるようにしましょう。

Data.cs

SystemLanguage型には各言語名がenumで定義されています。これを用いて言語設定を記憶します。

初期化メソッド内にてこのゲームをプレイ中の環境設定に応じた言語を取得します。環境が日本語でも英語でもなかった場合は英語になるよう設定します。

 

これで言語設定を使用できるようになったため、既存のEnemyData作成処理にて暫定的に日本語名のみを使用していた処理を変更します。

EnemyManager.cs

このあたりの敵名などの言語変化は7章で敵名を表示するUIに拡張した際に使われます。また、この後のスキルデータクラス実装の際にも言語変化に対応させていきます。

スキルデータクラスの実装

このゲームにおけるスキルはアクティブスキル(使用することで効果を発動するもの)とパッシブスキル(習得しているだけで効果を発揮し続けるもの)の2種類に大別できます。当面はアクティブスキルのみを実装します。

 

またスキルの習得に関する機能は後々実装しますが、スキルの習得にはSP(スキルポイント)を追加で消費することでスキルレベルを上昇させられるようにします。同じスキルでもスキルレベルが高ければ、より高い消費TPと引き換えにより高い効果量を発揮できるようになります。

このあたりの機能は世界樹の迷宮などでもお馴染みの形式ですね。

スキルデータの定義においては各スキルレベルごとの効果量倍率および消費TPを設定できるように工夫していきます。

また前述したように、1つのスキルでも複数のSkillEffectを持つ場合があるので注意して実装します。

 

それではスキルデータをScriptableObjectとして登録できるようにしていきましょう。SkillDataクラスを作成します。

SkillData.cs (新規)

続きを読む

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

まとめ

戦闘システムの1つとして重要な要素であるスキルについて実装を進めることができました。

次回からはカウントタイムバトルシステムの開発に着手していきます。各キャラクターにターンを回して、そのキャラクターがスキルを使用できるような状態を目指しましょう。

次の記事:

【Unity】3DダンジョンRPGの作り方 第7回|カウントタイムバトルシステムの実装
この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第7回目になります。前回はアクターとエネミーが戦闘中に使用するスキルの実装を行いました。前回の記事:ここからはこのゲームの戦闘システムにおいて重要になるCTB(カ...

Unity 3DダンジョンRPGの作り方講座に戻る >>

【ゲームの作り方講座もプレゼント中!】

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

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