バトルシーンのコマンドについて
バトルシーンでのコマンドの処理はRPGの肝とも言えます。
ボタンを押したらそれに合わせた行動の処理をするだけでも良いのですが、今後の拡張も考慮しておきたいと思います。
ユニットの全ての行動は"スキル"として扱います。
いまのところ必要なスキルは
- 主人公の攻撃
- 主人公の防御
- 主人公の回復
- 敵キャラの攻撃
の4つです。
コマンドに必要なものをユニットに追加する
スキルを反映させるにあたりユニットに必要な変数やメソッドを追加します。
UnitStatus.cs
ユニットにダメージを軽減する状態である防御の変数を追加します。
のちほどこの変数は毎ターン0fになるように処理します。
public float Guard = 0f;
以下の計算式で攻撃力を取得するメソッドを追加します。
主人公の攻撃力 = 3 + レベル x 2
敵キャラの攻撃力 = レベル
public int GetAttack() { if (ID == "HERO") { int at = 3 + Level * 3; return at; } else { int at = Level; return at; } }
スキルのマスターデータを作る
SkillDataスクリプトを作って、GameManagerにアタッチします。
(GameManagerをプレハブにしているときは、プレハブのほうにアタッチします。)
SkillDataスクリプトには2つのクラスを作ります。
1つはスクリプトを作ったときに自動で作成されるMonoBehaviourを継承しているSkillDataクラスです。
もう1つはMonoBehaviorを継承しないSkillParamsクラスです。
SkillData.cs
public class SkillData : MonoBehaviour { public SkillParams[] heroSkillList; public SkillParams[] enemySkillList; public SkillParams GetSkillHero(string ID) { for(int i = 0; i < heroSkillList.Length; i++) { if (heroSkillList[i].ID == ID) { return heroSkillList[i]; } } return null; } public SkillParams GetSkillEnemy(string ID) { for (int i = 0; i < enemySkillList.Length; i++) { if (enemySkillList[i].ID == ID) { return enemySkillList[i]; } } return null; } } [System.Serializable] public class SkillParams { public string ID; public float AttackRate; public float GuardRate; public float RecoveryRate; public GameObject EffectPrefab; }
主人公のスキルと敵キャラのスキルは別のリストで用意し、IDをもとにデータを取得するメソッドも主人公用と敵キャラ用で別に作っています。
スキルのパラメータの説明
攻撃率(attackRate)
スキル使用者の攻撃力をもとにスキルの攻撃率の割合でダメージを計算します。
ダメージはスキル対象者の防御率の割合で減少させます。
計算結果のダメージをスキル対象者のHPから減少させます。
防御率(guardRate)
スキル対象者の防御率にスキルの防御率を加算します。
最大値は1fとします。
ユニットの防御率はのちほど実装します。
回復率(recoveryRate)
スキル対象者の最大HPをもとにスキルの回復率の割合で回復量を計算します。
計算結果の回復量をスキル対象者のHPに増加します。
最小値を1fとします。
エフェクト(effectPrefab)
effectPrefabはあとでエフェクトを作成してからアウトレット接続するので先に用意してあります。
GameManagerでデータを管理する
敵キャラのデータのときと同じようにGameManagerにSkillData型の変数を作って、GameManagerをアウトレット接続します。
GameManagerのインスペクターからスキルデータを入力します。
GameManager.cs
public SkillData SkillData;
これでコマンドを実行するためのスキルマスターデータの準備ができました。