現場レベルのゲーム制作が、すべてここで学べます。
この記事はUnity入門の森のノンフィールドRPG講座で作ったゲームを改良アップデートしてSlay the Spire風デッキ構築系オリジナルJRPGを作る講座の第8回目です。
前回はイベント・カード・レリックデータなどを表示する情報表示UIを作成しました。
前回の記事:

第8回ではダンジョンでの移動処理とイベント発生処理を実装していきます。
ダンジョンの移動処理をイベント選択式にし、左右の分岐で敵と遭遇・レリック取得・カード報酬・回復・食料などさまざまなイベントが発生する仕組みを実装します。
一本道のランダムエンカウントから、プレイヤーが戦略的にルートを選べるローグライト型のダンジョン探索型RPGが実現します。

↑今回でこの動画のように進路を選択して進行先のイベントが発生するランダム要素のあるノンフィールドRPGに進化します。
まずは準備として定数クラスの変更とプレイデータとして保存するStatus系のクラスを追加・修正していきます。
定数を追加する
ダンジョンシステムの変更に合わせて、必要な定数を追加していきます。
以下のようにスクリプトに修正を加えていきましょう。
GameConstants.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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
//using UnityEngine;// (削除)使っていないので削除 public class GameConstants { public const string SaveDataKey = "HATENAKIDUNGEON";// データ保存で使うキー public const int StartLevel = 1;// ゲーム開始時のレベル public const int StartFood = 100;// ゲーム開始時の食料 public const int InitialFloor = 1;// 最初の階層 public const int HeroBaseHp = 45;// プレイヤーのHP public const int HeroRateHp = 5;// プレイヤーのレベル1ごとの上昇HP public const int EnemyBaseHp = 8;// 敵キャラのHP public const int EnemyRateHp = 3;// 敵キャラのレベル1ごとの上昇HP public const int HeroBaseAttack = 3;// プレイヤーの攻撃力 public const int HeroRateAttack = 3;// プレイヤーのレベル1ごとの上昇攻撃力 public const int EncountRate = 50;// (削除)敵キャラとの遭遇率(%) public const float MoveSpeed = 3f;// 前進の速さ public const float MoveDistance = 3f;// 前進した時のカメラの移動距離 public const float RecoveryRate = 0.2f;// HPの回復量 //public const int RecoveryCT = 3;// (削除)回復スキルのクールタイム public const float TurnSpeed = 1f;// ターンの処理の待ち時間 public const float ShakeDuration = 0.2f;// 揺れ演出の揺れの時間(秒) public const float ShakeMagnitude = 0.1f; // 揺れ演出の揺れの強さ public const float BattleFinishDelay = 1f;// 戦闘終了時の演出ステップの待機時間 public const int UpgradeStartCost = 1;// ポイントで強化するときの基本コスト public const int HeroInitSP = 3;// (追加)ターンごとに初期化されるSPの値 public const int HeroDealNum = 3;// (追加)主人公のカード配布枚数 public const int HeroBaseDefense = 3;// (追加)プレイヤーの防御力 public const int HeroRateDefense = 1;// (追加)プレイヤーのレベル1ごとの上昇防御力 public const int CountRelic = 10;// (追加)レリック取得イベント発生までのカウント public const int CountCard = 3;// (追加)カード取得イベント発生までのカウント public const int CountRecover = 7;// (追加)回復イベント発生までのカウント public const int CountFood = 5;// (追加)食料取得イベント発生までのカウント public const int CardRewardNum = 3;// (追加)カード報酬の数 public const int FoodRewardNum = 10;// (追加)食料取得イベントで取得できる量 } |
イベント発生までのカウントを定義しています。
さらに、カードイベントで報酬を選択できる数や、食料イベントで取得できる量を定義しています。
イベントをランダムで設定する
移動方向(左か右)によって発生するイベントを変えるため、事前にDungeonStatusに保持しておきます。
また、イベントの内容をセットするためのメソッドも追加します。
DungeonStatus.cs
ダンジョンでの移動を二択かつイベント発生にしたので、移動先のイベントを決めておく変数の宣言と、イベントをセットするためのメソッドを定義します。
まとめ

今回はダンジョンでの移動処理やイベント発生処理を実装しました。
元々は一本道を進むだけでしたが、今回の実装でイベント選択式のダンジョン探索型ローグライトRPGに大幅アップデートされました。
ただタップして先に進むだけではやはりどうしても単調さが残りますが、今回のようにプレイヤーが常に自分のステータス状態に応じてゲーム進行を選択できるようになるとRPGの自由度が大幅に高まります。しかも進行先にはランダム性があるので毎プレイ違う展開を楽しめます。
ゲーム性が大きく改善し、プレイしていてより面白いRPGになりました。
元々完成していたゲームをどうアップデートしていくかの本質的な流れをここまでで追体験できたかと思います。
ですが、まだまだノンフィールドRPG講座を応用アップデート編は続きます!
次回はレリックや状態異常のアイコンをステータスウィンドウに表示する仕組みを実装します。アイコンをタップすると詳細情報が表示される機能も合わせて作り、視覚的にキャラクターの状態が把握できるUIに仕上げていきます。
次の記事:

現場レベルのゲーム制作が、すべてここで学べます。







コメント