前回の記事では戦闘終了後の経験値獲得・レベルアップ処理を実装しました。
前回の記事:
今回の記事ではランダムエンカウントを実装していきます。
ランダムエンカウントとはマップを移動すると敵と遭遇し戦闘シーンに入る機能になります。
この講座ではフィールドマップとダンジョンマップの両方にランダムエンカウントを実装していきます。
ランダムエンカウントに必要なスクリプトを実装
それではまず、ランダムエンカウントに必要なスクリプトを作成していきます。
次の「RandomEncount.cs」というスクリプトを新しく作成してください。保存先はお好みでOKですが、記事ではAssets > Scriptsフォルダーに保存しています。
「RandomEncount.cs」の内容は次のようにしてください。
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 |
// RandomEncount.cs RandomEncountクラスの実装 using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Enemy/Random Encount")] public class RandomEncount : ScriptableObject { [System.Serializable] public class Data { [Range(0, 1)] public float EncountRate; public EncounterEnemies EncounterEnemies; } [Range(0, 1)] public float EncountRate = 0.2f; public List<Data> List; public EncounterEnemies Encount(System.Random rnd) { if (EncountRate < rnd.NextDouble()) return null; foreach(var d in List) { var t = rnd.NextDouble(); if(t < d.EncountRate) { return d.EncounterEnemies; } } return null; } } |
実装できたら、メニューのAssets > Create > Enemy > RandomEncountをクリックして、「FIeldMapEncounter」と「DungeonMapEncounter」を作成してください。
設定内容は次のようにしてください。中で「EncounterEnemies」クラスを使用しています。このクラスは新しく作成してください。内容はお好みでOKです。(敵の数を増やしたり、「EncounterEnemies」アセットを増やすときに使います。)
1 2 3 4 5 6 7 8 9 |
// FieldMapEncounter.assetの設定内容 EncountRate : 0.2 //移動時の敵の出現率 List : Size=2 - Element0 : - - Encount Rate : 0.5 //出現率 - - EncounterEnemies : EncounterEnemies.asset - Element0 : EncounterEnemies.asset - - Encount Rate : 0.2 //出現率 - - EncounterEnemies : EncounterEnemies2.asset |
1 2 3 4 5 6 7 8 9 |
// DungeonMapEncounter.assetの設定内容 EncountRate : 0.5 //移動時の敵の出現率 List : Size=2 - Element0 : - - Encount Rate : 0.5 //出現率 - - EncounterEnemies : EncounterEnemies.asset - Element0 : EncounterEnemies.asset - - Encount Rate : 0.2 //出現率 - - EncounterEnemies : EncounterEnemies2.asset |
Mapコンポーネントに組み込む
ランダムエンカウントに必要なデータを用意したので次は「Map」コンポーネントに「RandomEncount」クラスを設定できるようにします。
次のように「Map」コンポーネントを修正してください。
まとめ
今回の記事ではランダムエンカウントを実装してきました。
プレイヤーの移動に合わせて敵が出現するようになったので、大分RPGゲームぽくなってきたのではないでしょうか?
今回の内容を簡単にまとめると以下のようになります。
- ランダムエンカウントで出現する敵のリストを表す「RandomEncount」クラスの実装
- フィールドマップとダンジョンマップに「RandomEncount」クラスを設定できるようにした。
- プレイヤーが移動したとき戦闘シーンに入るか判定する処理を追加。
それでは次の記事に行ってみましょう。
UnityとC#で作る2DRPGゲームの作り方講座に戻る>>
コメント