前回までの記事で敵の移動AIをUnityとC#でローグライクRPGに組み込んでいきました。
前回の記事:
今回の記事ではプレイヤーと敵がぶつかった時に戦闘するようにしていきましょう!
まずは戦闘に必要なプレイヤーのステータスパラメータを作り、戦闘システムを実装します。
また、敗北時はゲームオーバー表示を行うようにしましょう。
キャラクターのステータスを組み込む
プレイヤーと敵が戦闘する際にはいくつかのパラメータが必要になります。
RPGでは色々なパラメータが用意されており、それらを使ってダメージなどを計算行いますが、この講座では簡単化のために次のパラメータのみでシンプルな戦闘システムを作ります。
- Life:体力
- Attack:攻撃力
また、敵同士で戦闘しないようにするために識別用のパラメータも用意します。
- Group: 敵味方の識別用パラメータ
これらのパラメータを「MapObjectBase」コンポーネントに持たせるようにします。スクリプトに以下の追加を行いましょう。
1 2 3 4 5 6 7 8 9 |
//以下を追加 public int Life = 5; public int Attack = 2; public enum Group { Player, Enemy, Other, } public Group CurrentGroup = Group.Other; |
「CurrentGroup」フィールドはデフォルトで「Other」に設定しておきます。
「Other」は攻撃できないオブジェクトを表すので、このまま攻撃処理を実装しても再生時に攻撃できない状態になっています。
なので、「Player」プレハブと「Enemy」プレハブそれぞれに合ったGroupの値を設定しましょう!
1 2 3 4 5 |
//Playerプレハブ CurrentGroup = Group.Player //Enemyプレハブ CurrentGroup = Group.Enemy; |
ローグライクゲームにおけるターン制戦闘システムの実装
戦闘用のパラメータをキャラに持たせたので、次はローグライクゲームにおける攻撃の方法を実装します。
この講座では移動先に「MapObjectBase」コンポーネントを継承したオブジェクトが存在する時にそのオブジェクトに攻撃するようにします。
以下に戦闘のロジックを記述しています。この記事ではこの内容に沿って戦闘システムを作成していきます。
- 移動先に攻撃可能なオブジェクトがあるか確認する
- 攻撃可能な場合は、自身の攻撃力分だけ相手のライフにダメージを与える。
- 攻撃の結果、相手オブジェクトのライフが0以下になったらそのオブジェクトを削除し、そのマスに移動する。
- まだライフが残っている場合は自身は移動せずその場に留まる。
それでは攻撃できるようにスクリプトを修正していきます。
まとめ
今回の記事ではまずはシンプルな戦闘システムの実装を行いました。
- 戦闘用のパラメータを「MapObjectBase」コンポーネントに組み込み
- 戦闘用のメソッドを「MapObjectBase」コンポーネントに組み込み
- ゲームオーバー処理の組み込み
今回の5回目までの講座だけでもローグライクRPGの基本部分であるマップ移動とターン制戦闘システムができあがりましたね。
ここからはこの基本システムをどんどん拡張して本格的なローグライクゲームに仕上げていきます。
それでは次の記事に行ってみましょう。
コメント
MapObjectBaseのところが、MapCharacterBaseになっている場所が何箇所かあるかと思います。
ここだけでなく、2ページ前にも。混乱するので、修正いただければと思います。
コメントありがとうございます。返信遅くなりすみません。確認させていただきました。
MapObjectBaseが正しいです。
ご指摘ありがとうございました。
MapCharacterBase→MapObjectBase?
コメントありがとうございます。
こちらMapObjectBaseが正しいです。
既に作成したスクリプトに追加し、それを継承していく流れになります。