今回は戦闘シーンで使用する敵キャラクターのステータスの作成と敵パーティーデータの作成等を行っていきたいと思います。
前回はワールドマップで敵と遭遇するエンカウント機能を作成しました。
ユニティちゃんのRPGを作ってみようの他の記事は
から見ることが出来ます。
戦闘シーンをいきなり一つの記事で作り上げるとコマンド画面のアイテムコマンドのように非常に分かり辛くて長い記事が出来上がりますので・・・、今回は戦闘シーンを作る為に複数の記事に渡って作成していきたいと思います。
その最初の段階として戦闘シーンで使用するデータの作成を行っておきます。
戦闘シーンでは味方のパーティーステータス、敵のパーティーステータス、味方の個々のキャラクターのステータス、敵の個々のキャラクターのステータスが必要になります。
前の記事で味方キャラクターデータと味方のパーティーのデータは作成しているので、同じように敵の個々のキャラクターデータと敵のパーティーのデータも作成します。
敵キャラクターモデルをインポートする
戦闘シーンで使用する敵キャラクターのモデルをインポートします。
アセットストアで『Goblin robber』『Mini Legion Grunt PBR HP』『Dream Word Fairies』『Fantasy Monsters Zolrik (ZolrikMercenary) – Strategy, RPG』『Lasser Imp』『Goblin Ranger』等で検索して出てくる無料のモデルをインポートして敵キャラクターとして使わせてもらいます。
敵キャラクターとして使用するモデルやアニメーション等は特に指定はありませんので、お好きな物を探してみてください。
戦闘で使用する敵キャラクタープレハブの作成
敵キャラクターをインポートしたら、敵キャラクターのモデルを一旦ヒエラルキー上に配置し、名前を『敵の名前Prefab』というように変更します。
例えばElfであれば『ElfPrefab』とします。
これはわかりやすいように変更しただけで別の名前にしてもかまいません。
ヒエラルキー上のそれらのキャラクターを全て選択して右クリック→Unpack Prefab Complitelyを選択し元のモデルプレハブとのリンクを解除します。
Assets/RPG/Prefabs/Charactersフォルダに新しくEnemyフォルダを作成し、そのフォルダにヒエラルキー上の先ほどの3体の敵キャラクターをドラッグ&ドロップします。
これで戦闘シーンで使用する敵キャラクターをプレハブに出来ました。
ヒエラルキー上の3体の敵はいらないので削除しておきます。
現時点では3体の敵キャラクターのプレハブにはAnimator等を設定していませんが、戦闘シーンを作成する時に徐々に取り付けていきます。
ステータスデータの作成
敵キャラクターと敵パーティーのステータスデータを作成していきます。
敵キャラクターステータスデータの作成
敵キャラクターステータスデータを作成するスクリプトはCharacterStatusスクリプトを継承して作成していきます。
やり方は味方キャラクターステータスデータを作成したのと同じなので問題はないと思います。
Assets/RPG/Scripts/Statusフォルダの中に新しくEnemyStatusスクリプトを作成します。
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 | using System; using System.Collections; using System.Collections.Generic; using UnityEngine; [Serializable] [CreateAssetMenu(fileName = "EnemyStatus", menuName = "CreateEnemyStatus")] public class EnemyStatus : CharacterStatus { // 倒した時に得られる経験値 [SerializeField] private int gettingExperience = 10; // 倒した時に得られるお金 [SerializeField] private int gettingMoney = 10; // 落とすアイテムと落とす確率(パーセンテージ表示) [SerializeField] private ItemDictionary dropItemDictionary = null; public int GetGettingExperience() { return gettingExperience; } public int GetGettingMoney() { return gettingMoney; } // 落とすアイテムのItemDictionaryを返す public ItemDictionary GetDropItemDictionary() { return dropItemDictionary; } // アイテムを落とす確率を返す public int GetProbabilityOfDroppingItem(Item item) { return dropItemDictionary[item]; } } |
敵のステータスは継承元のCharacterStatusで定義されているので戦闘した時に追加で必要なパラメータを定義しています。
今のところはその敵を倒した時に得られる経験値、お金、倒した時に得られるアイテムディクショナリーとその確率を保持するようにしています。
戦闘シーンを作ったら持っているスキル等のデータを追加しますが、現時点では上の通りです。
敵キャラクターステータスアセットファイルの作成
EnemyStatusスクリプトが出来たのでAssets/RPG/Data/Statusフォルダに新しくEnemyフォルダを作成しその中で右クリックからCreate→CreateEnemyStatusを選択し敵キャラクターステータスデータの作成をします。
以前作成したPartyStatus、UnityChanStatus、YujiStatusはAssets/RPG/Data/Statusフォルダに新しくAllyフォルダを作成しその中に移動させておきます。
今回はとりあえずElf、Goblin、GoblinWarriorの3つの敵キャラクターステータスデータを作成しました。
それぞれのファイルを選択し、インスペクタでデータを設定します。
Elfには以下のように設定しました。
DropItemDictionaryのRainbowSwordは5%の確率で落とすということになります。
敵キャラクターのデータが出来たので戦闘シーンに移動したらこのデータから敵キャラクターのプレハブをインスタンス化したり、攻撃をする際にデータを取得したり、敵を倒した時に得られるアイテムが何かを知ることが出来ます。
敵パーティーステータスデータの作成
ワールドマップで敵と遭遇したらどんな敵のパーティーと遭遇したか?のデータが必要になります。
ワールドマップのどの位置で敵と遭遇したかによってどの敵パーティーと戦うかを選択出来るようにする為、あらかじめ敵パーティーのデータを作成しておきその中から選ぶようにします。
Assets/RPG/Scripts/Statusフォルダに新しくEnemyPartyStatusスクリプトを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using System; using System.Collections; using System.Collections.Generic; using UnityEngine; [Serializable] [CreateAssetMenu(fileName = "EnemyPartyStatus", menuName = "CreateEnemyPartyStatus")] public class EnemyPartyStatus : ScriptableObject { [SerializeField] private string partyName = null; [SerializeField] private List<GameObject> partyMembers = null; public string GetPartyName() { return partyName; } public List<GameObject> GetEnemyGameObjectList() { return partyMembers; } } |
partyNameにはその敵のパーティーの名前を設定出来るようにします。
戦闘時の敵のプレハブを保持するリストを持っていてそれを返します。
敵パーティーステータスアセットファイルの作成
スクリプトが出来たので、アセットファイルを作成します。
Assets/RPG/Data/Status/Enemyフォルダに移動し、右クリックからCreate→CreateEnemyPartyStatusを選択します。
今回は4つの敵パーティーステータスを作成し、名前をEnemyGroup1、EnemyGroup2、EnemyGroup3、EnemyGroup4としました。
名前が分かり辛いのでわかりやすい名前を付ける事をお勧めします・・・・(-_-)
今回作成したEnemyGroup1、EnemyGroup2、EnemyGroup3、EnemyGroup4の敵は以下のようにしました。
戦闘シーンに遷移した時に敵と遭遇したワールドマップの位置に応じてこれらの敵パーティーステータスデータを保持したリスト等からデータを持ってきてその個々の敵キャラクターを配置したりします。
これで敵キャラクターデータと敵パーティーデータが出来ました。
終わりに
前の記事で味方キャラクターデータや味方パーティーデータを作っているので、特に問題なく記事を読み進められたのではないでしょうか?
今回は敵のキャラクターデータは固定になっていますが、敵キャラクターのレベルに応じて力や打たれ強さ、得られるアイテムが変わるようにするのもいいかもしれません。
それは元のスクリプトで力や打たれ強さ等をリストや配列等でレベルに応じて対応する値を返すようにすることも出来ますし(この場合はアセットファイルではなくスクリプトでパラメータを設定)、Goblinは同じでもレベル15のゴブリンならばGoblin15という敵キャラクターのアセットファイルを予め作っておくという方法もあります。
この作品はユニティちゃんライセンス条項の元に提供されています