こんにちは、深夜です。
前回の記事では、本作の基本となる「魔法陣システムとデッキ構築・合成」について紹介しました。今回は、構築したデッキを試す本番の戦場である「Wave(ウェーブ)システム」の設計意図、および第15ウェーブクリア後に移行できる「エンドレスモード」と、ボス撃破報酬である「GP(成長ポイント)システム」の仕様変更について解説します。
🌀 Wave進行の調整とボスウェーブの設計意図
本作のWave進行は、通常エネミーが出現するWaveと、ボスが出現する特別ウェーブで構成されています。
開発初期テストでは3ウェーブごと(Wave 3, 6, 9…)にボスが出現する設定を採用していましたが、「プレイヤーがデッキの構築や合成を行う時間が十分に確保できず、戦略性を楽しむ前にボスとの戦闘が発生する」という課題がありました。
このバランスを改善するため、最新の仕様ではボスの出現頻度を 「5ウェーブごと(Wave 5, 10, 15)」 に変更しました。
【Wave進行設計】
Wave 1 〜 4 : 通常エネミー(初期デッキの構築と合成の試行錯誤期間)
Wave 5 : 第1ボス出現(初期ビルドの動作確認)
Wave 6 〜 9 : 通常エネミー(高レベルカードへの進化とスタック配置の拡大)
Wave 10 : 第2ボス出現(中盤の難所、配置戦略の再点検)
Wave 11 〜 14: 通常エネミー(最終Waveに向けた最大火力デッキの完成フェーズ)
Wave 15 : 最終ボス出現(通常プレイのゲームクリア判定Wave)
出現間隔を5ウェーブに広げたことで、プレイヤーが戦略的にカードを収集・マージしてデッキを強化したうえでボスに臨むという、ビルドアップの楽しさを活かすゲームデザインに調整しています。

💀 エンドレスモードのシステム仕様
Wave 15 のボスを撃破すると通常ゲームクリアとなり、リザルト画面へ進むか、またはエンドレスモードへ移行するかの選択ダイアログが表示されます。
エンドレスモードを選択した場合、ウェーブ制限が解除され、以下の難易度上昇補正が適用された状態で進行が続行されます。
📈 敵ステータスのインフレ仕様
- 敵HPの指数関数的増加: ウェーブが1進行するごとに、出現する敵の最大HPが 15%ずつ乗算(指数関数的)に増加 します。
- スポーン間隔の短縮: ウェーブ進行ごとに敵の出現時間間隔が 5%ずつ短縮 されます(最大で通常時の約3.3倍速まで加速)。
- ボス出現の継続: 5の倍数ウェーブ(Wave 20, 25, 30…)には、HP補正が適用されたボスモンスターが出現します。
このモードは、構築したデッキの火力と配置スピードがどこまで機能するかを検証するための限界調整フェーズとして位置づけています。
ただ、この補正値に関しては、今後実装される魔法とのバランスを見つつ、妥当性をさらに要検討と考えています。

⚡ GP(成長ポイント)によるプレイヤー能力強化
ボスウェーブをクリアすると、報酬として「GP(Growth Points:成長ポイント)」が獲得できます。GPを消費することで、一度のプレイ中に以下のプレイヤーパラメータを永続強化できます。
- 最大HP: 防衛ライフの最大値を増やします。
- 最大MP: 魔法陣の同時配置キャパシティを底上げします。
- HP自動回復速度: 減少した防衛ライフの復旧量を増やします。
- MP自動回復速度: 魔法陣の回収時や時間経過に伴うMPの回転率を高めます。
(ただ現状、強化する値はMP自動回復一択なんですよねぇ。)

📊 視認性を重視した「詳細リザルト画面」
ゲームオーバー時、またはゲームクリア時に表示されるリザルト画面は、プレイヤーの戦績データを簡潔に確認できるよう、以下の設計方針でレイアウトを構築しました。
🏆 リザルト仕様
- 魔法デッキの「魔法種類」×「レベル」降順ソート:最終的に構築した所持デッキカードを、「魔法番号(種類)の降順」 ➔ 「カードレベルの降順」 で二重ソートしてグリッド表示します。プレイヤーがどの系統を主軸として強化したかが整理された状態で確認できます。
- 累計討伐数のグリッド一覧:ゲーム開始から〜終了までに撃破した全モンスターの合計数を、敵スプライトアイコンと共に一覧表示します。

💡 【技術ワンポイント】難易度崩壊を防ぐ「指数関数による敵能力スケーリング計算式」
エンドレスモードでは、進行するにつれて敵の体力や攻撃力を強化していく必要があります。 しかし、「ウェーブごとに体力を+100する」といった単純な足し算(線形増加)では中盤以降にプレイヤーが強くなりすぎて歯ごたえがなくなり、逆に急激な掛け算では一瞬で敵が強くなりすぎてゲームオーバーになってしまいます。 「基本値 × (1 + 増加率)のウェーブ数乗」 という指数関数をベースにしたスケーリング関数を設計することで、プレイヤーの成長曲線と絶妙に拮抗する美しい難易度曲線を構築できます。
■ スケーリングの計算式
- 敵体力 =
基本体力 × ( 1 + 増加率 ) ^ (超過ウェーブ数)- 例: 基本体力 100、ウェーブごとに 15% 強化(増加率 0.15)の場合:
- 5ウェーブ後:
100 × (1.15)⁵ ≒ 201 - 10ウェーブ後:
100 × (1.15)¹⁰ ≒ 404
- 5ウェーブ後:
- 例: 基本体力 100、ウェーブごとに 15% 強化(増加率 0.15)の場合:
using UnityEngine;
public class EnemyDifficultyScaler : MonoBehaviour
{
/// <summary>
/// ウェーブ数に応じてスケーリングされた敵の最大体力を計算する
/// </summary>
/// <param name="baseHealth">敵の基準体力</param>
/// <param name="currentWave">現在のウェーブ数</param>
/// <param name="endlessStartWave">エンドレス開始ウェーブ(例: 16)</param>
/// <param name="growthRatePerWave">1ウェーブあたりの体力増加率(例: 0.15 = 15%)</param>
public static int CalculateEnemyHealth(
int baseHealth,
int currentWave,
int endlessStartWave = 16,
float growthRatePerWave = 0.15f)
{
// エンドレス以前の通常ウェーブは基本体力のまま
if (currentWave < endlessStartWave)
{
return baseHealth;
}
// エンドレス突入後の超過ウェーブ数を算出
int extraWaves = currentWave - endlessStartWave + 1;
// 指数関数(べき乗)によりスケーリング倍率を計算: (1 + 増加率) ^ 超過ウェーブ数
float scaleMultiplier = Mathf.Pow(1f + growthRatePerWave, extraWaves);
// 基準体力に倍率を掛けて整数値として返す
return Mathf.RoundToInt(baseHealth * scaleMultiplier);
}
}🚀 次回予告
Waveシステムとエンドレスモードの実装により、戦闘のメインサイクルが確定しました。 次の開発は既存の粗削りな処理を整理していくかSHOPの実装をするかなど、やりたいことはいっぱいあれど少し仮実装として中途半端な状態で残っている機能などもあるので先ずはその整理からと考えています。
それでは、また次回の開発記録でお会いしましょう。


コメント