65歩目 ステージ選択機能を実装! Unityで1日1ステップ!ノンフィールドRPG開発日記

1日1歩開発日記

ふりかえり

前回は、テストプレイしてくださった方々からのフィードバックをもとに、戦闘の倍速機能を追加しました!

テンポが改善され、よりストレスなく戦闘を楽しめるようになりました。

ステージ選択機能を実装!

今回も引き続き、クローズドテストでいただいたご意見をもとに改善を行います。

特に多かったのが、

「ステージを選べず、不便に感じる」

「敵がどんどん強くなる一方で、弱い敵を相手にしたくても戻れない」

という声でした。

現状の課題

これまでの仕様では、ステージ内の全てのモンスターを倒すと自動で次のステージに進む仕組みでした。

そのため、一度進んだら戻ることができず、金策やレベル上げが困難でした。

実装した機能

今回、以下の2つの機能を新たに実装しました。

① 繰り返しモード

特定のステージを繰り返しプレイ可能にする機能です。

ONにすることで、モンスターを全滅させたあとも、そのステージの最初に戻って再戦できるようになります。

効率よく経験値やG(ゲーム内通貨)を稼げるので、育成や金策にとても便利!

② ステージ移動機能

任意のタイミングで、ステージを前後に移動できる機能です。

進みすぎて敵が強すぎたら1つ前のステージに戻ったり、逆に戻りすぎたら最大到達ステージまで一気に進めるようにしています。

スクリプト

StageManager.cs(ステージ管理)

  • 現在のステージ番号や最大到達ステージを管理
  • ステージクリア後、繰り返しか次ステージかを判定し、適切な処理を行う
  • 前後のステージへの移動関数を用意
  • 各ステージの敵数やフラグをリセット
private int currentStage = 1; // 現在のステージ
private int monstersDefeatedInStage = 0; // 現在のステージで倒したモンスター数
private bool isStageClearing = false; // ステージクリア中かどうかを管理
private bool isRepeatModeEnabled = false; // 繰り返しモードが有効かどうか
private int maxStageReached = 1; // 到達した最大ステージ

// 繰り返しモードの場合は現在のステージをリセット、そうでなければ次のステージに進む
if (isRepeatModeEnabled)
{
    Invoke("ResetCurrentStage", 1.0f); // 1秒後に現在のステージをリセット
}
else
{
    Invoke("NextStage", 1.0f); // 1秒後に次のステージに進む
}

// 次のステージに進む
public void NextStage()
{
    currentStage++;
    monstersDefeatedInStage = 0;

// 現在のステージをリセット(繰り返しモード用)
private void ResetCurrentStage()
{
    monstersDefeatedInStage = 0;
    isStageClearing = false; // ステージクリア中フラグをリセット
    // 敵の準備とアニメ、UI更新など…
}

// 前のステージに移動
public void GoToPreviousStage()
{
    if (currentStage > 1)
    {
        currentStage--;
        monstersDefeatedInStage = 0;
        isStageClearing = false;
        // BGM・背景更新、敵準備、UI更新…
    }
}

// 次のステージに移動
public void GoToNextStage()
{
    if (currentStage < maxStageReached)
    {
        currentStage++;
        monstersDefeatedInStage = 0;
        isStageClearing = false;
        // BGM・背景更新、敵準備、UI更新…
    }
}

// 前後移動の可否
public bool CanGoToPreviousStage() { return currentStage > 1; }
public bool CanGoToNextStage() { return currentStage < maxStageReached; }

BattleUIManager.cs(UI制御)

  • 「繰り返しモード」のボタンUIを制御
  • ON/OFF状態によって、ボタンの色やラベルを変更
  • 「前のステージ」「次のステージ」ボタンの有効/無効も条件で切り替え
[Header("Repeat Mode UI")]
public Button repeatModeButton; // 繰り返しモードボタン
public TextMeshProUGUI repeatModeButtonText; // ボタンテキスト
public Color repeatModeEnabledColor = Color.green;
public Color repeatModeDisabledColor = Color.white;

// 繰り返しモードボタンのイベントリスナーを設定
repeatModeButton.onClick.RemoveAllListeners();
repeatModeButton.onClick.AddListener(ToggleRepeatMode);

// 繰り返しモードボタンの更新
private void UpdateRepeatModeButton()
{
    if (stageManager == null || repeatModeButton == null) return;
    bool isRepeatModeEnabled = stageManager.IsRepeatModeEnabled();
    if (repeatModeButtonText != null)
    {
        repeatModeButtonText.text = isRepeatModeEnabled ? "繰り返し: ON" : "繰り返し: OFF";
    }
    var buttonImage = repeatModeButton.GetComponent<Image>();
    if (buttonImage != null)
    {
        buttonImage.color = isRepeatModeEnabled ? repeatModeEnabledColor : repeatModeDisabledColor;
    }
}

// 前後ボタンの押下可否更新
bool canGoPrevious = stageManager.CanGoToPreviousStage();
previousStageButton.interactable = canGoPrevious;
bool canGoNext = stageManager.CanGoToNextStage();
nextStageButton.interactable = canGoNext;


動作確認

  • 繰り返しモードをONにすると、ステージクリア後に同じステージが再開されました!
  • 前後ボタンでステージ移動もスムーズに行え、自由にプレイできるように!

まとめ

今回は、ユーザビリティ向上のために「ステージの繰り返しプレイ」および「任意のステージ移動」機能を追加しました。

これにより、自分に合ったステージで繰り返し戦えるようになり、金策やレベル上げの自由度が大幅に向上しました!

プレイヤーが自分のペースで遊べる環境が整ってきたと思います

次回予告

次回は、

  • 画面が回転してしまう問題
  • モンスター画像がぼやけてしまう現象

など、実機プレイで判明した細かい問題点の修正に取り組みます!

お楽しみに!

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