48歩目 更なる強化要素を実装①! Unityで1日1ステップ!ノンフィールドRPG開発日記

1日1歩開発日記

ふりかえり

前回は「回復薬」の実装に取り組みました。

これにより、プレイヤーがより長くダンジョン探索を続けられるようになり、戦略の幅が広がりました。

今回の実装概要:ステータスを「割合」で強化!

今回はさらに一歩進めて、プレイヤーの強化をより奥深いものにしていきます。

既存のG強化・アーティファクト強化・転生(マナ)強化に、「ステータスをパーセンテージで底上げする要素」を追加しました。

追加した要素

G強化に追加:

  • GHPパーセンテージ強化
  • G攻撃力パーセンテージ強化
  • G防御力パーセンテージ強化

アーティファクト強化に追加:

  • アーティファクトHPパーセンテージ強化
  • アーティファクト攻撃力パーセンテージ強化
  • アーティファクト防御力パーセンテージ強化

マナ強化(転生強化)に追加:

  • 転生HPパーセンテージ強化
  • 転生攻撃力パーセンテージ強化
  • 転生防御力パーセンテージ強化

このように、各強化項目に対して“実数強化”だけでなく“割合強化”が加わることで、ゲーム後半ほど恩恵が大きくなる設計にしました。

 強化の計算式(例)

たとえば、G強化で以下のような条件だったとします:

  • 基礎HP:100
  • G強化によるHP:+10
  • GHPパーセンテージ強化:10%

この場合、

最終HP = 100 + (10 × 1.10) = 111

というように、G強化の値に対してさらに10%が乗算されます。

スクリプトの変化

以下はG強化ステータスのHPと攻撃力と防御力をそれぞれパーセンテージで強化するための処理です。

PowerUpManager.cs

強化処理ごとに関数を分け、それぞれ条件チェック → ゴールド消費 → ステータス強化 → UI更新&SE再生を行います。

1. HPパーセンテージ強化
  • 条件:所持Goldが必要コスト以上
  • 強化値:gPowerUpHPPercentage に加算
  • UIとSEを反映
2. 攻撃力パーセンテージ強化
  • 条件と処理はHPと同様で、攻撃力バージョン
3. 防御力パーセンテージ強化
  • 処理の流れは同じ、対象が防御力
    // HPパーセンテージ強化
    public void PowerUpHPPercentage()
    {
        if (playerManager.player.gold >= hpPercentageUpCost)
        {
            playerManager.player.gold -= hpPercentageUpCost;
            playerManager.player.gPowerUpHPPercentage += hpPercentageUpValue;
            
            // 強化SEを再生
            if (audioManager != null)
            {
                audioManager.PlayPowerUpSE();
            }
            
            ShowMessage($"HPパーセンテージ強化が{hpPercentageUpValue * 100}%増加しました!");
        }
        else
        {
            ShowMessage("ゴールドが足りません。");
        }
        playerManager.playerUIManager.UpdateUI();
        UpdateUI();
    }

    // 攻撃力パーセンテージ強化
    public void PowerUpAttackPercentage()
    {
        if (playerManager.player.gold >= attackPercentageUpCost)
        {
            playerManager.player.gold -= attackPercentageUpCost;
            playerManager.player.gPowerUpAttackPercentage += attackPercentageUpValue;
            
            // 強化SEを再生
            if (audioManager != null)
            {
                audioManager.PlayPowerUpSE();
            }
            
            ShowMessage($"攻撃力パーセンテージ強化が{attackPercentageUpValue * 100}%増加しました!");
        }
        else
        {
            ShowMessage("ゴールドが足りません。");
        }
        playerManager.playerUIManager.UpdateUI();
        UpdateUI();
    }

    // 防御力パーセンテージ強化
    public void PowerUpDefensePercentage()
    {
        if (playerManager.player.gold >= defensePercentageUpCost)
        {
            playerManager.player.gold -= defensePercentageUpCost;
            playerManager.player.gPowerUpDefensePercentage += defensePercentageUpValue;
            
            // 強化SEを再生
            if (audioManager != null)
            {
                audioManager.PlayPowerUpSE();
            }
            
            ShowMessage($"防御力パーセンテージ強化が{defensePercentageUpValue * 100}%増加しました!");
        }
        else
        {
            ShowMessage("ゴールドが足りません。");
        }
        playerManager.playerUIManager.UpdateUI();
        UpdateUI();
    }

PlayerData.cs

各最終ステータスを計算する際、実数強化+割合強化をすべて合算して最終値を出力します。

同様の処理が攻撃力・防御力にも適用され、後半になればなるほど「割合強化」の恩恵が大きくなります。

    public int GetFinalMaxHP() 
    {
        int baseTotal = baseMaxHP;
        float gPowerUpWithPercentage = gPowerUpHP * (1f + gPowerUpHPPercentage);
        float artifactPowerUpWithPercentage = artifactPowerUpHP * (1f + artifactPowerUpHPPercentage);
        float prestigePowerUpWithPercentage = prestigePowerUpHP * (1f + prestigePowerUpHPPercentage);
        return Mathf.RoundToInt(baseTotal + gPowerUpWithPercentage + artifactPowerUpWithPercentage + prestigePowerUpWithPercentage);
    }
    
    public int GetFinalAttack() 
    {
        int baseTotal = baseAttack;
        float gPowerUpWithPercentage = gPowerUpAttack * (1f + gPowerUpAttackPercentage);
        float artifactPowerUpWithPercentage = artifactPowerUpAttack * (1f + artifactPowerUpAttackPercentage);
        float prestigePowerUpWithPercentage = prestigePowerUpAttack * (1f + prestigePowerUpAttackPercentage);
        return Mathf.RoundToInt(baseTotal + gPowerUpWithPercentage + artifactPowerUpWithPercentage + prestigePowerUpWithPercentage);
    }
    
    public int GetFinalDefense() 
    {
        int baseTotal = baseDefense;
        float gPowerUpWithPercentage = gPowerUpDefense * (1f + gPowerUpDefensePercentage);
        float artifactPowerUpWithPercentage = artifactPowerUpDefense * (1f + artifactPowerUpDefensePercentage);
        float prestigePowerUpWithPercentage = prestigePowerUpDefense * (1f + prestigePowerUpDefensePercentage);
        return Mathf.RoundToInt(baseTotal + gPowerUpWithPercentage + artifactPowerUpWithPercentage + prestigePowerUpWithPercentage);

同じようにアーティファクトとマナ強化も追加します。

Unityでの設定

G強化UIの設定

  • 新たに追加した「GHPパーセンテージ強化」などのボタンを配置。
  • 各ボタンにPowerUpManagerの対応メソッドを紐付け。

アーティファクト・マナ強化UI

  • こちらは既存の自動UI生成システムにより、自動的に表示されるため手動設定は不要。

設定画面

  • 強化内容のステータスがリアルタイムで反映されるように、各強化ステータスの表示用TextをSettingsManagerのインスペクターで参照。

動作確認

実際のプレイ画面において、以下の点を確認しました:

  • PowerUp、Artifact、Pristigeの各画面で新たな強化が正常に反映。
  • 設定画面にて、最終ステータスの数値が正しく更新されている。
  • SEやメッセージ表示などの演出も問題なく動作。

まとめ

今回は、RPGの「成長の手応え」をさらに強化するために、割合によるパワーアップ要素を各強化カテゴリに導入しました。

プレイヤーが中盤以降も強化の恩恵を感じられるようになり、やり込み要素としても奥深さが増しています。

特に、レベルアップだけでなく「どの強化要素を優先するか」を考える戦略性が加わったことは、今後のプレイ体験に大きく影響するはずです。

進捗

今回はG強化・アーティファクト・転生の拡張の一部を実装をしました!

  • (済)オート戦闘:ボタン操作なしでもバトルが進むようにする。
  • (済)オートスキル発動:スキルも自動で発動する機能。
  • UIのブラッシュアップ:デザインとレイアウトを整えて見やすくする。
  • (済)ステージ数の拡充(最低20):遊びごたえを高めるためにボリュームアップ。
  • 復活機能(広告視聴):ゲームオーバー時、広告視聴で復活できる仕組み。
  • 広告報酬でダイヤ獲得:無課金でもダイヤが手に入る仕組み。
  • G強化・アーティファクト・転生の拡張:各システムにさらなる深みを持たせる。
  • (済)回復薬の追加:ステージを進めやすくする。
  • アニメーションの追加:ゲーム画面にもっと動きを持たせる。
  • レアモンスターの追加:わくわく感を追加する。

次回予告

次回は、一旦UIのブラッシュアップをして見栄えの良いゲームにしていきたいと思います!

お楽しみに!

タイトルとURLをコピーしました