今回は戦闘シーンで使用するキャラクターのスキルデータを作成していきます。
前回は戦闘シーンでキャラクター名、HP、MPを表示しました。
ユニティちゃんのRPGを作ってみようの他の記事は
から見ることが出来ます。
戦闘シーンで選択する項目は『直接攻撃』『防御』『魔法』『アイテム』等がありますが、これらをスキルデータとしてあらかじめ作成しておき、戦闘に参加するキャラクターが保持出来るようにします。
スキルデータはScriptableObjectを使って作成していきます。
Skillスクリプトの作成
全てのスキルの元となるスクリプトSkillスクリプトをAssets/RPG/Scriptsに新しくSkillフォルダを作成し、その中に入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [Serializable] [CreateAssetMenu(fileName = "Skill", menuName = "CreateSkill")] public class Skill : ScriptableObject { public enum Type { DirectAttack, Guard, GetAway, Item, MagicAttack, RecoveryMagic, PoisonnouRecoveryMagic, NumbnessRecoveryMagic, IncreaseAttackPowerMagic, IncreaseDefencePowerMagic } [SerializeField] private Type skillType = Type.DirectAttack; [SerializeField] private string kanjiName = ""; [SerializeField] private string hiraganaName = ""; [SerializeField] private string information = ""; // 使用者のエフェクト [SerializeField] private GameObject skillUserEffect = null; // 魔法を受ける側のエフェクト [SerializeField] private GameObject skillReceivingSideEffect = null; // スキルの種類を返す public Type GetSkillType() { return skillType; } // スキルの名前を返す public string GetKanjiName() { return kanjiName; } // スキルの平仮名の名前を返す public string GetHiraganaName() { return hiraganaName; } // スキル情報を返す public string GetInformation() { return information; } // 使用者のエフェクトを返す public GameObject GetSkillUserEffect() { return skillUserEffect; } // 魔法を受ける側のエフェクトを返す public GameObject GetSkillReceivingSideEffect() { return skillReceivingSideEffect; } } |
Skillスクリプトはアセットファイルを作成出来るようにCreateAssetMenuアトリビュートを取り付けています。
列挙型のTypeでスキルのタイプを宣言しています。
skillTypeはこのスキルのタイプを設定します。
kanjiNameはスキルの漢字名、hiraganaNameはスキルの平仮名、informationはスキルの情報です。
skillUserEffectはこのスキルを使用した人の方に表示するエフェクト、skillReceivingSideEffectはスキルを受けた側に表示するエフェクトを設定します。
メソッド群はそれぞれのフィールドを返すだけです。
Magicスクリプトの作成
ほとんどのスキルはSkillスクリプトからアセットファイルを作成しますが、魔法系のスキルは魔法の攻撃力や使用するMP、魔法の属性等の追加情報が必要なのでSkillスクリプトを継承してMagicスクリプトを作成します。
作成する場所はAssets/RPG/Scripts/Skillフォルダです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [Serializable] [CreateAssetMenu(fileName = "Magic", menuName = "CreateMagic")] public class Magic : Skill { public enum MagicAttribute { Fire, Water, Thunder, Other } // 魔法力 [SerializeField] private int magicPower = 0; // 使うMP [SerializeField] private int amountToUseMagicPoints = 0; // 魔法の属性 [SerializeField] private MagicAttribute magicAttribute = MagicAttribute.Other; // 魔法力を返す public int GetMagicPower() { return magicPower; } // 魔法の属性を返す public MagicAttribute GetMagicAttribute() { return magicAttribute; } public void SetAmountToUseMagicPoints(int point) { amountToUseMagicPoints = Mathf.Max(0, Mathf.Min(amountToUseMagicPoints, point)); } public int GetAmountToUseMagicPoints() { return amountToUseMagicPoints; } } |
Skillスクリプトを継承してMagicスクリプトを作成し、CreateAssetMenuアトリビュートを取り付けてアセットファイルを作成出来るようにしています。
列挙型のMagicAttributeで魔法の属性を宣言しています。
スクリプトの中身はフィールド宣言とそれを返すメソッドが定義されているだけです。
スキルデータを作成する
スキルデータの元となるスクリプトが出来たので後は実際にスキルデータを作成するだけです。
通常スキルデータの作成
Assets/RPG/Data/Skill/Normalフォルダに通常のスキルデータを作成していきます。
右クリックからCreate→CreateSkillを選択し、名前をDirectAttackとします。
同じようにGetAwayとGuardとItemを作成します。
それぞれのインスペクタでは以下のように設定します。
DirectAttackのSkillReceivingSideEffectに設定したエフェクトはアセットストアで『Cartoon FX Free』で検索して出てくるアセットの中のパーティクルを指定しています。
Assets/Effect/JMO Assets/Cartoon FX/CFX Prefabs/Hits/CFX_Hit_C_Whiteを設定しました。
これ以降エフェクトにはいくつかパーティクルゲームオブジェクトを設定しますが、各自自由に設定してみてください。
魔法スキルデータの作成
次に個々の魔法スキルデータを作成していきます。
Assets/RPG/Data/Skill/Magicフォルダで右クリックからCreate→CreateMagicを選択し、魔法の名前を設定します。
今回はFire、Healing、IncreaseAttackPower、IncreadDefencePower、NumbnessMagic、PoisonnousMagic、Thunderを作成しました。
FireとHealingは
IncreaseAttackPowerとIncreaseDefencePowerは
NumbnessRecoveryとPoisonnousRecoveryは
Thunderは
のように設定しました。
NumbnessRecoveryとPoisonnousRecoveryはmagicPowerが必要ないのに持ってしまっていますのでSkillを継承した別のスクリプトを作成しそこからアセットファイルを作成した方がいいかもしれません。
今回はそのまま使う事にしました。
CharacterStatusスクリプトの修正
スキルデータを作成したのでキャラクター毎に持っているスキルを設定する必要があります。
味方でも敵でもスキルは持っているのでCharacterStatusスクリプトにスキルを保持出来るようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 持っているスキル [SerializeField] private List<Skill> skillList = null; public void SetSkillList(List<Skill> skillList) { this.skillList = skillList; } public List<Skill> GetSkillList() { return skillList; } |
skillListは先ほど作成したスキルデータを設定します。
フィールド値を返すメソッドも用意します。
これでキャラクター毎にスキルを設定出来るようになったの個々のキャラクターのステータスにスキルデータを設定します。
ユニティちゃんのステータスはAssets/RPG/Data/Status/Ally/UnityChanなので選択しインスペクタでスキルを設定します。
その他Assets/RPG/Data/Status/Ally/YujiStatusにもスキルを設定します。
後はAssets/RPG/Data/Status/Enemyフォルダの敵のステータスにも設定します。
Elfは
Goblinは
GoblinWarriorは
のように設定しました。
これで個々のキャラクターが持つスキルを設定することが出来ました。
終わりに
今回は戦闘で使用するスキルデータの作成をしましたが、戦闘シーンでは魔法の属性を使っていなかったり、痺れや毒からの回復等の処理も作成しません。
色々なデータをとりあえず作ってみたというだけで、実際に処理を作る場合はそれ用の処理を入れてみてください。
この作品はユニティちゃんライセンス条項の元に提供されています