🔥

Unity初心者必見!設定画面の作り方 : 音量設定・解像度変更など

2025/01/23に公開

Unity初心者必見!設定画面の作り方 : 音量設定・解像度変更など

Unityでゲームを制作していると、音量の調整や解像度の切り替えなど、プレイヤーが自由にカスタマイズできる設定画面が欲しくなる場面がよくあります。

とくに初心者の方は、「どうやってUIと連携すればいいの?」「セーブデータをどこに保存すればいいの?」と戸惑いやすいポイントです。

本記事では、「設定画面を作りたいけれど、具体的なプログラム構成がわからない」という方のために、UnityのUIと組み合わせたセーブ&ロード方法をご紹介します。

保存先として使用するのは、Unity初心者にも扱いやすいPlayerPrefsです。汎用性が高く、音量や解像度などの複数項目をまとめて管理できますので、ぜひ自分のプロジェクトに組み込んでみてください。

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a/viewer/0570af

設定画面を作るうえでのポイント

UnityのUIを使って設定画面を作る際、スライダーやドロップダウンなどのUI要素とスクリプトを連携させるのが基本です。たとえば音量設定ならスライダーを用い、値の変動をリアルタイムで確認しながら保存する形が定番です。ポイントは以下のとおりです。

  • 音量や解像度のパラメータを変数に保持しておく
  • UI要素と変数をリアルタイムで同期する
  • 変更値をPlayerPrefsへ保存し、次回起動時にロードする

「設定画面で音量を下げたのに、ゲームを再起動したら反映されていない…」といった不具合を回避するには、セーブとロードの処理が確実に行われているかを確認しましょう。

PlayerPrefsとは?

ただし、大容量データを保存するのには不向きなので、サウンドボリュームや解像度設定のような軽量なデータを保管する用途に向いています。

音量設定とセーブの例

ステップ1: UIの用意

  • まずはスライダーをUnityのCanvas上に配置します。
  • スライダーの「Max Value」を1.0、「Min Value」を0.0などに設定し、音量に合った範囲に合わせます。

ステップ2: スクリプトでリンク

using UnityEngine;
using UnityEngine.UI;

public class AudioSetting : MonoBehaviour
{
    [SerializeField] private Slider volumeSlider;
    private const string VolumeKey = "GameVolume";

    void Start()
    {
        float savedVolume = PlayerPrefs.GetFloat(VolumeKey, 1.0f);
        volumeSlider.value = savedVolume;
        SetVolume(savedVolume);

        // UI側が変わったら呼ばれるイベントを登録
        volumeSlider.onValueChanged.AddListener((value) => {
            SetVolume(value);
            PlayerPrefs.SetFloat(VolumeKey, value);
            PlayerPrefs.Save();
        });
    }

    void SetVolume(float vol)
    {
        // 実際のオーディオミキサーやAudioSourceなどに反映
        AudioListener.volume = vol;
    }
}
  • スライダーのvaluePlayerPrefs.GetFloatで読み込み、画面起動時に音量を復元
  • スライダー操作時にPlayerPrefs.SetFloatでセーブ、PlayerPrefs.Saveで確定

これで、ゲーム再起動後も前回の音量設定が保たれます。

解像度設定とセーブの例

解像度やウィンドウモードなど、グラフィック関連の設定も同様に行えます。ドロップダウンやトグルを使ってScreen.SetResolutionFullScreenModeを変更し、その値をPlayerPrefsに保存すればOKです。

解像度設定のサンプル

using UnityEngine;
using UnityEngine.UI;

public class ResolutionSetting : MonoBehaviour
{
    [SerializeField] private Dropdown resolutionDropdown;
    private const string ResolutionKey = "ScreenResolution";

    void Start()
    {
        // システムにある解像度リストを取得
        Resolution[] resolutions = Screen.resolutions;
        resolutionDropdown.ClearOptions();

        // Dropdownに解像度リストを表示
        foreach (var res in resolutions)
        {
            resolutionDropdown.options.Add(new Dropdown.OptionData(
                res.width + "x" + res.height
            ));
        }

        // 保存された解像度インデックスを読み込み
        int savedIndex = PlayerPrefs.GetInt(ResolutionKey, 0);
        resolutionDropdown.value = savedIndex;

        resolutionDropdown.onValueChanged.AddListener((index) => {
            PlayerPrefs.SetInt(ResolutionKey, index);
            PlayerPrefs.Save();

            // 実際に解像度変更
            Resolution newRes = resolutions[index];
            Screen.SetResolution(newRes.width, newRes.height, Screen.fullScreen);
        });
    }
}
  • Screen.resolutionsを参照して、Dropdownに選択肢を動的に追加
  • ユーザーが選んだ解像度のインデックスをPlayerPrefsへ保存し、起動時に復元

このようにUI操作 → PlayerPrefs保存 → 次回起動時に設定反映という流れを押さえれば、どんな設定項目でも同じように実装できます。

応用:一括管理と多項目対応

もし設定項目が増えてきたら、一つ一つの値を保存するより、JSON形式でまとめる方法も有効です。たとえば、音量・解像度・フルスクリーン設定などをまとめたクラスを作成し、JsonUtilityでシリアライズしてPlayerPrefsに格納するのです。そうすれば、複数項目を一括で読み書きできるため、スクリプトが整理しやすくなります。

もう少し詳しく
  • [System.Serializable]属性を付けた「SettingsData」クラスなどを用意
  • 各種設定(音量, 解像度Index, フルスクリーンbool...)をメンバ変数として持たせる
  • JsonUtility.ToJson(settingsData)で文字列化 → PlayerPrefs.SetString("Settings", json)
  • 起動時にJsonUtility.FromJson<SettingsData>で復元

まとめ

  • 音量や解像度などの設定は、UnityのUIとスクリプトを連携しつつ、変更値をPlayerPrefsに保存すれば再起動後も適用される
  • 簡単な保存ならSetFloat, SetInt, SetStringなどで十分だが、項目が増える場合はJSONでまとめる方法もおすすめ
  • 設定画面はプレイヤーの快適さに直結し、ゲームのクオリティを上げる重要ポイント

本記事のサンプルを踏まえて、ぜひ実際のプロジェクトでも音量・解像度などのカスタマイズを実装してみましょう。自分ならではの設定メニューを作り、よりプレイしやすいゲームを提供してください!

この記事を読んでもっと実践したいと感じたあなたへ

Unity開発を効率よく進めるためには、実践的なスキルと仲間との交流が欠かせません。
そんな方におすすめのステップが、下記の3つです。

1. 有料教材「どこでもUnity教室」でゲーム制作を短期マスター

  • 5日でシンプルなFPS完成:初心者向けに要点を押さえたカリキュラム
  • C#や最新のInputSystem、FPS実装まで網羅:つまずきやすいポイントを先回りで解説
  • 購入特典:Discord招待+サンプルプロジェクトDLで、疑問や実装例を即確認

Unity初心者でも最短5日で3D FPSが完成!今すぐ始める入門チュートリアルはこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a/viewer/0570af

2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP

  • 初心者~中級者までOK:学習進度に合わせて質問や情報共有
  • 質問サポートが充実:わからないことを仲間や講師に即相談
  • 学習仲間と切磋琢磨:一緒に学ぶから続けやすい

Discordサーバー参加はこちら

https://discord.gg/5FwuKCacNy

3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート

  • コナラ総販売200件超:さまざまなUnity開発の依頼を対応
  • VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
  • ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数

ご相談・お問い合わせはこちら

https://coconala.com/users/1772507

Discussion