37歩目 設定画面を実装! Unityで1日1ステップ!ノンフィールドRPG開発日記

1日1歩開発日記

ふりかえり

前回はBGMを実装して、草原や森にそれぞれの雰囲気が加わりました!

音があると、世界への没入感がグッと増しますね!

設定画面を実装!

今回は、設定画面を作ります!

  • プレイヤーステータスの確認
  • SE・BGMの音量調整

この2つをUI上から確認・操作できるようにします!

スクリプトの変更

SettingsManager.cs

  • settingsButton を押すと settingsPanel の表示を切り替えます。
  • プレイヤーの名前やレベル、攻撃力や会心率などを TextMeshProUGUI に表示します。
  • SE と BGM それぞれのスライダーで音量を変更可能にします。
  • 変更時には AudioManager に値を渡して、リアルタイムに音量を反映!
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class SettingsManager : MonoBehaviour
{
    [Header("UI References")]
    public GameObject settingsPanel; // 設定パネル
    public Button settingsButton; // 設定ボタン(開閉用)

    [Header("プレイヤー情報表示")]
    public TextMeshProUGUI playerNameText;
    public TextMeshProUGUI playerLevelText;
    public TextMeshProUGUI playerHPText;
    public TextMeshProUGUI playerAttackText;
    public TextMeshProUGUI playerDefenseText;
    public TextMeshProUGUI playerCriticalRateText;
    public TextMeshProUGUI playerCriticalDamageText;
    public TextMeshProUGUI playerGoldText;
    public TextMeshProUGUI playerDiamondText;

    [Header("音量設定")]
    public Slider seVolumeSlider; // SE音量スライダー
    public Slider bgmVolumeSlider; // BGM音量スライダー
    public TextMeshProUGUI seVolumeText; // SE音量表示テキスト
    public TextMeshProUGUI bgmVolumeText; // BGM音量表示テキスト

    [Header("参照")]
    public PlayerManager playerManager;
    public AudioManager audioManager;

    private bool isSettingsOpen = false;

    void Start()
    {
        // 設定ボタンのイベントリスナーを設定
        if (settingsButton != null)
        {
            settingsButton.onClick.AddListener(ToggleSettingsPanel);
        }

        // スライダーのイベントリスナーを設定
        if (seVolumeSlider != null)
        {
            seVolumeSlider.onValueChanged.AddListener(OnSEVolumeChanged);
        }
        if (bgmVolumeSlider != null)
        {
            bgmVolumeSlider.onValueChanged.AddListener(OnBGMVolumeChanged);
        }

        // 初期設定:設定パネルは閉じた状態
        if (settingsPanel != null)
        {
            settingsPanel.SetActive(false);
        }
        isSettingsOpen = false;

        // 音量スライダーの初期値を設定
        InitializeVolumeSliders();
    }

    // 設定パネルの表示/非表示を切り替え
    public void ToggleSettingsPanel()
    {
        isSettingsOpen = !isSettingsOpen;
        
        if (settingsPanel != null)
        {
            settingsPanel.SetActive(isSettingsOpen);
        }

        if (isSettingsOpen)
        {
            UpdatePlayerInfo();
            UpdateVolumeDisplay();
        }
    }

    // プレイヤー情報を更新
    private void UpdatePlayerInfo()
    {
        if (playerManager == null || playerManager.player == null) return;

        var player = playerManager.player;

        if (playerNameText != null)
            playerNameText.text = $"名前: {player.name}";
        
        if (playerLevelText != null)
            playerLevelText.text = $"レベル: {player.level}";
        
        if (playerHPText != null)
            playerHPText.text = $"HP: {player.currentHP}/{player.maxHP}";
        
        if (playerAttackText != null)
            playerAttackText.text = $"攻撃力: {player.attack}";
        
        if (playerDefenseText != null)
            playerDefenseText.text = $"防御力: {player.defense}";
        
        if (playerCriticalRateText != null)
            playerCriticalRateText.text = $"会心率: {player.criticalRate * 100:F1}%";
        
        if (playerCriticalDamageText != null)
            playerCriticalDamageText.text = $"会心倍率: {player.criticalDamageMultiplier:F1}倍";
        
        if (playerGoldText != null)
            playerGoldText.text = $"ゴールド: {player.gold}";
        
        if (playerDiamondText != null)
            playerDiamondText.text = $"ダイヤ: {player.diamond}";
    }

    // 音量スライダーの初期化
    private void InitializeVolumeSliders()
    {
        if (audioManager != null)
        {
            if (seVolumeSlider != null)
            {
                seVolumeSlider.value = audioManager.seVolume;
            }
            if (bgmVolumeSlider != null)
            {
                bgmVolumeSlider.value = audioManager.bgmVolume;
            }
        }
    }

    // 音量表示を更新
    private void UpdateVolumeDisplay()
    {
        if (audioManager != null)
        {
            if (seVolumeText != null)
            {
                seVolumeText.text = $"SE音量: {(audioManager.seVolume * 100):F0}%";
            }
            if (bgmVolumeText != null)
            {
                bgmVolumeText.text = $"BGM音量: {(audioManager.bgmVolume * 100):F0}%";
            }
        }
    }

    // SE音量変更時の処理
    private void OnSEVolumeChanged(float value)
    {
        if (audioManager != null)
        {
            audioManager.SetSEVolume(value);
            UpdateVolumeDisplay();
        }
    }

    // BGM音量変更時の処理
    private void OnBGMVolumeChanged(float value)
    {
        if (audioManager != null)
        {
            audioManager.SetBGMVolume(value);
            UpdateVolumeDisplay();
        }
    }

    // 設定パネルが開いているかどうかを取得
    public bool IsSettingsOpen()
    {
        return isSettingsOpen;
    }
} 

Unityでの設定

  1. SettingsManager を空のGameObjectに追加
  2. 設定画面パネル、ボタン、テキスト、スライダーなどのUIを作成
  3. SettingsManager に各UI要素をInspectorからアタッチ

動作確認

右下のSettingsボタンをタップすると設定画面が開きます!

  • プレイヤーのステータスが一覧で表示!
  • SE・BGM音量のスライダーを動かすと、リアルタイムに音量が変化!

ゲームの細かな調整ができるようになって、より快適にプレイできます!

まとめ

今回は設定画面を実装しました!

  • ステータスの見える化
  • 音量の調整機能

このようにゲームプレイに直接関係しない便利機能をまとめて配置するのが「設定画面」です。

次回予告

次回はいよいよガチャ機能を実装!

お楽しみに!

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