<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Unity設定画面 | C-BA Unity-memo</title>
	<atom:link href="https://cbagames.jp/tag/unity%e8%a8%ad%e5%ae%9a%e7%94%bb%e9%9d%a2/feed/" rel="self" type="application/rss+xml" />
	<link>https://cbagames.jp</link>
	<description>はじめてのUnity、最初の一歩をここから。</description>
	<lastBuildDate>Tue, 20 Jan 2026 07:21:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://cbagames.jp/wp-content/uploads/2025/06/cropped-e1be66ba-4f8f-4615-959a-7e6f63ac455b-32x32.png</url>
	<title>Unity設定画面 | C-BA Unity-memo</title>
	<link>https://cbagames.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Unityで設定画面（Options）を作る完全ガイド｜音量・解像度・フルスクリーン・キー設定を実装</title>
		<link>https://cbagames.jp/2025/12/15/unity-options-settings-implementation/</link>
					<comments>https://cbagames.jp/2025/12/15/unity-options-settings-implementation/#respond</comments>
		
		<dc:creator><![CDATA[C-BA]]></dc:creator>
		<pubDate>Mon, 15 Dec 2025 10:32:01 +0000</pubDate>
				<category><![CDATA[Unity C#・スクリプト実装]]></category>
		<category><![CDATA[AudioMixer]]></category>
		<category><![CDATA[Options実装]]></category>
		<category><![CDATA[PlayerPrefs]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity UI]]></category>
		<category><![CDATA[Unity設定画面]]></category>
		<category><![CDATA[解像度設定]]></category>
		<guid isPermaLink="false">https://cbagames.jp/?p=15338</guid>

					<description><![CDATA[ゲームにおける設定画面（Options）は、ただの付属機能ではありません。音量がうるさすぎる、画面が合わない、フルスクリーンにできない──こうした“小さな不満”が積み重なると、どんなに面白いゲームでも、プレイヤーは静かに [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>ゲームにおける<strong>設定画面（Options）</strong>は、ただの付属機能ではありません。<br>音量がうるさすぎる、画面が合わない、フルスクリーンにできない──<br>こうした“小さな不満”が積み重なると、どんなに面白いゲームでも、プレイヤーは静かに離れていってしまいます。</p>



<p>特にPC向けのUnityゲームでは、<strong>解像度・フルスクリーン・音量・キー設定</strong>といった項目は、<br>「あって当たり前」の存在です。<br>逆に言えば、設定画面がしっかり作られているだけで、ゲーム全体の完成度や信頼感は一段上がります。</p>



<p>とはいえ、実際に作ろうとすると──<br>UIの用意、Screenクラスの制御、AudioMixerの設定、保存処理……<br><strong>思っている以上に手間がかかる</strong>のも事実です。</p>



<p>そこでこの記事では、Unityで<strong>実用レベルの設定画面（Options）を実装するための考え方と手順</strong>を、<br>初心者の方にも分かりやすく、かつ中・上級者の方にも役立つ形でまとめました。</p>



<p>具体的には、次のような内容を扱います。</p>



<ul class="wp-block-list">
<li>UXを損なわない設定画面の設計ポイント</li>



<li>音量・解像度・フルスクリーン・VSyncの実装方法</li>



<li>AudioMixerを使った本格的な音量管理</li>



<li>設定内容を保存・復元する仕組み</li>



<li>「全部自作すべきか？」という現実的な判断基準</li>
</ul>



<p>「とりあえず動く」設定画面ではなく、<br><strong>プレイヤーにとって気持ちよく使えるOptions画面</strong>を作りたい方は、ぜひ最後まで読んでみてくださいね😊</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-disc toc-center tnt-disc border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2"><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Unityで設定画面（Options）が重要な理由</a><ol><li><a href="#toc2" tabindex="0">最低限そろえておきたい設定項目</a></li><li><a href="#toc3" tabindex="0">UXを悪化させやすい設定画面の落とし穴</a></li></ol></li><li><a href="#toc4" tabindex="0">Unityで設定画面（Options）を実装する全体構成</a><ol><li><a href="#toc5" tabindex="0">設定画面は「UI・処理・保存」の3つで考える</a></li><li><a href="#toc6" tabindex="0">「選択中の値」と「適用中の値」を分ける</a></li><li><a href="#toc7" tabindex="0">設定画面を開いたときの初期化が重要</a></li><li><a href="#toc8" tabindex="0">Applyボタンを中心に設計する</a></li></ol></li><li><a href="#toc9" tabindex="0">フルスクリーンとVSyncの設定を実装する</a><ol><li><a href="#toc10" tabindex="0">使用するUnityのクラスとUIコンポーネント</a></li><li><a href="#toc11" tabindex="0">フルスクリーン設定の基本</a></li><li><a href="#toc12" tabindex="0">VSync（垂直同期）の設定</a></li><li><a href="#toc13" tabindex="0">Applyボタンでまとめて反映する</a></li></ol></li><li><a href="#toc14" tabindex="0">解像度設定を実装する（左右ボタン＋Apply方式）</a><ol><li><a href="#toc15" tabindex="0">解像度設定で押さえるべき考え方</a></li><li><a href="#toc16" tabindex="0">解像度情報を管理する方法（インスペクターで編集できる形）</a></li><li><a href="#toc17" tabindex="0">UI：左右ボタンで解像度を切り替える</a></li><li><a href="#toc18" tabindex="0">起動時（または設定画面を開いたとき）の初期化</a></li><li><a href="#toc19" tabindex="0">Applyで解像度を反映する（Screen.SetResolution）</a></li></ol></li><li><a href="#toc20" tabindex="0">音量設定を実装する（シンプル版 → AudioMixer版）</a><ol><li><a href="#toc21" tabindex="0">方法1：とにかく簡単に作る（AudioListener.volume）</a></li><li><a href="#toc22" tabindex="0">方法2：BGM/SEを分けて管理する（AudioMixer）</a></li><li><a href="#toc23" tabindex="0">サウンドダッキング（Ducking）もAudioMixerでできる</a></li><li><a href="#toc24" tabindex="0">音管理をもっと楽にしたい人向け（1回だけ紹介）</a></li></ol></li><li><a href="#toc25" tabindex="0">設定を保存・復元する（PlayerPrefsで永続化）</a><ol><li><a href="#toc26" tabindex="0">PlayerPrefsでできること（できないこと）</a></li><li><a href="#toc27" tabindex="0">保存の基本方針：Apply時にまとめて保存する</a></li><li><a href="#toc28" tabindex="0">保存するキー設計（例）</a></li><li><a href="#toc29" tabindex="0">復元の基本方針：起動時（または設定画面表示時）にUIへ反映</a></li><li><a href="#toc30" tabindex="0">「リセット（初期化）」ボタンを用意すると親切</a></li></ol></li><li><a href="#toc31" tabindex="0">キーコンフィグ（キー設定）を実装する考え方（破綻しない設計）</a><ol><li><a href="#toc32" tabindex="0">Input.GetKeyの直書きは後で詰む</a></li><li><a href="#toc33" tabindex="0">ラッパー関数（入力の窓口）を作る</a></li><li><a href="#toc34" tabindex="0">「List&lt;KeyCode&gt;」で複数割り当てを許可すると強い</a></li><li><a href="#toc35" tabindex="0">キー割り当てUIの基本（待機 → 取得 → 反映）</a></li><li><a href="#toc36" tabindex="0">競合（同じキーが他に使われている）をどう扱う？</a></li><li><a href="#toc37" tabindex="0">保存・復元は「KeyCodeをintで保存」するのが手堅い</a></li></ol></li><li><a href="#toc38" tabindex="0">設定画面を全部自作する前に知っておきたい現実的な選択肢</a><ol><li><a href="#toc39" tabindex="0">設定画面は「完成して当たり前」な機能</a></li><li><a href="#toc40" tabindex="0">Options画面を一気に完成させたい人向けの選択肢</a></li><li><a href="#toc41" tabindex="0">自作とアセット、どちらを選ぶべき？</a></li></ol></li><li><a href="#toc42" tabindex="0">ビルド時のデフォルト設定を見直す（Player Settings）</a><ol><li><a href="#toc43" tabindex="0">Player Settingsは「初回起動時の体験」を決める</a></li><li><a href="#toc44" tabindex="0">設定場所：Resolution and Presentation</a></li><li><a href="#toc45" tabindex="0">Fullscreen Modeの選び方</a></li><li><a href="#toc46" tabindex="0">Default Screen Width / Height</a></li><li><a href="#toc47" tabindex="0">Resizable Window と Allow Fullscreen Switch</a></li><li><a href="#toc48" tabindex="0">Supported Aspect Ratios（アスペクト比）</a></li></ol></li><li><a href="#toc49" tabindex="0">まとめ｜Unityの設定画面（Options）実装で押さえるべきポイント</a><ol><li><a href="#toc50" tabindex="0">設定画面は「UXを支える基盤機能」</a></li><li><a href="#toc51" tabindex="0">Apply方式と「選択中 / 適用中」の分離が安定のカギ</a></li><li><a href="#toc52" tabindex="0">音量・入力・保存は「最初に設計」しておく</a></li><li><a href="#toc53" tabindex="0">自作かアセットかは「目的」で決めていい</a></li><li><a href="#toc54" tabindex="0">Player SettingsとOptionsは必ずセットで考える</a></li><li><a href="#toc55" tabindex="0">あわせて読みたい</a></li><li><a href="#toc56" tabindex="0">参考文献・参考リンク</a></li></ol></li><li><a href="#toc57" tabindex="0">よくある質問（FAQ）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Unityで設定画面（Options）が重要な理由</span></h2>



<p>Unityでゲームを作っていると、キャラクター操作や演出、バトルシステムなどに目が行きがちですが、<br><strong>設定画面（Options）はプレイヤー体験を支える「土台」</strong>のような存在です。</p>



<p>特にPCゲームでは、プレイヤーごとに環境が大きく異なります。</p>



<ul class="wp-block-list">
<li>モニターの解像度やサイズが違う</li>



<li>フルスクリーン派・ウィンドウ派が分かれる</li>



<li>ヘッドホン・スピーカーなど音響環境が違う</li>



<li>キーボード配列や操作の好みが違う</li>
</ul>



<p>この差を吸収する役割を担うのが、設定画面です。<br>設定項目が不足しているだけで、「このゲーム、ちょっと不親切だな…」と感じさせてしまうこともあります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc2">最低限そろえておきたい設定項目</span></h3>



<p>ジャンルを問わず、多くのUnityゲームで<strong>共通して求められる設定項目</strong>は次のとおりです。</p>



<ul class="wp-block-list">
<li><strong>音量設定</strong>（マスター / BGM / SE）</li>



<li><strong>解像度設定</strong></li>



<li><strong>フルスクリーン / ウィンドウ切り替え</strong></li>



<li><strong>VSync（垂直同期）のON / OFF</strong></li>



<li><strong>キーコンフィグ（キー設定）</strong></li>
</ul>



<p>これらは「こだわり要素」ではなく、<br><strong>あることが前提</strong>として扱われる項目です。</p>



<p>特に音量と解像度は、ゲーム起動直後に触られることが多く、<br>ここでストレスを感じさせてしまうと、そのままプレイをやめられてしまう可能性もあります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc3">UXを悪化させやすい設定画面の落とし穴</span></h3>



<p>設定画面を作るときに、やってしまいがちな失敗もあります。</p>



<ul class="wp-block-list">
<li>トグルを切り替えた瞬間に解像度が変わる</li>



<li>フルスクリーン変更で画面が一時的に見えなくなる</li>



<li>設定を閉じると内容が保存されていない</li>
</ul>



<p>特に解像度やフルスクリーン設定は、<br><strong>即時反映するとプレイヤーが操作不能になるリスク</strong>があります。</p>



<p>そのため、多くのゲームでは</p>



<ul class="wp-block-list">
<li>UI上では一時的に選択状態にする</li>



<li>「変更を適用（Apply）」ボタンを押した時だけ反映する</li>
</ul>



<p>という方式が採用されています。<br>この「ワンクッション」があるだけで、設定画面の安心感は大きく変わります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次の章では、こうした前提を踏まえたうえで、<br><strong>Unityで設定画面を実装する全体構成</strong>を整理していきます。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc4">Unityで設定画面（Options）を実装する全体構成</span></h2>



<p>ここからは、Unityで設定画面を作るときに<br><strong>「どんな構成で考えると破綻しにくいか」</strong>を整理していきます。</p>



<p>いきなりコードを書き始めるよりも、<br>先に<strong>全体の役割分担</strong>を理解しておくと、後からの修正がかなり楽になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">設定画面は「UI・処理・保存」の3つで考える</span></h3>



<p>Unityの設定画面は、大きく分けると次の3要素で構成されます。</p>



<ul class="wp-block-list">
<li><strong>UI</strong>：Toggle / Slider / Button などの見た目と操作部分</li>



<li><strong>処理</strong>：Screen・QualitySettings・AudioMixerなどへの反映</li>



<li><strong>保存</strong>：PlayerPrefsなどを使った設定値の永続化</li>
</ul>



<p>この3つを<strong>ごちゃ混ぜにしない</strong>ことが、設定画面を安定させる最大のポイントです。</p>



<p>特にありがちなのが、</p>



<ul class="wp-block-list">
<li>UIのイベント内で直接すべての処理を書く</li>



<li>保存と適用のタイミングが混在する</li>
</ul>



<p>という構成です。<br>最初は動いても、設定項目が増えた瞬間に管理できなくなります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">「選択中の値」と「適用中の値」を分ける</span></h3>



<p>設定画面では、<strong>今UIで選ばれている値</strong>と、<br><strong>実際にゲームに反映されている値</strong>を分けて考える必要があります。</p>



<p>例えば解像度設定の場合、</p>



<ul class="wp-block-list">
<li>左右ボタンで解像度を切り替える（選択中）</li>



<li>Applyボタンを押すまで画面には反映しない（未適用）</li>
</ul>



<p>という状態が存在します。</p>



<p>このとき、</p>



<ul class="wp-block-list">
<li>選択中の値 → 変数で保持</li>



<li>適用時 → Screen.SetResolution を実行</li>
</ul>



<p>という流れを意識すると、UXを壊さずに実装できます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">設定画面を開いたときの初期化が重要</span></h3>



<p>設定画面を開いた瞬間に、<br><strong>現在の設定とUIの表示がズレている</strong>と、それだけで不信感を与えてしまいます。</p>



<p>そのため、設定画面では必ず次の初期化処理を行います。</p>



<ul class="wp-block-list">
<li>現在のフルスクリーン状態をToggleに反映</li>



<li>VSyncの有無をToggleに反映</li>



<li>現在の解像度に対応するインデックスを選択</li>



<li>保存済みの音量をSliderに反映</li>
</ul>



<p>「設定を開いたら、今の状態がそのまま見える」<br>この当たり前を守ることが、使いやすいOptions画面につながります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">Applyボタンを中心に設計する</span></h3>



<p>設定画面の処理は、<br><strong>すべて「変更を適用（Apply）」ボタンを起点に考える</strong>と整理しやすくなります。</p>



<ul class="wp-block-list">
<li>UI操作 → 一時変数を変更</li>



<li>Apply押下 → 画面・音量・品質設定に反映</li>



<li>同時にPlayerPrefsへ保存</li>
</ul>



<p>この流れを守ることで、</p>



<ul class="wp-block-list">
<li>誤操作による事故を防げる</li>



<li>設定の保存漏れが起きにくい</li>



<li>後から項目を追加しやすい</li>
</ul>



<p>といったメリットがあります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次の章では、まず<strong>フルスクリーンとVSync</strong>を例に、<br>Unityでの具体的な実装方法を見ていきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc9">フルスクリーンとVSyncの設定を実装する</span></h2>



<p>まずは設定画面の中でも実装しやすく、<br>かつ<strong>効果が分かりやすい項目</strong>である「フルスクリーン」と「VSync」から作っていきましょう。</p>



<p>この2つは、Unity標準のクラスだけで制御できるため、<br>Options実装の入り口としてとても向いています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">使用するUnityのクラスとUIコンポーネント</span></h3>



<p>今回使用する主な要素は次のとおりです。</p>



<ul class="wp-block-list">
<li><strong>UI Toggle</strong>：ON / OFF の切り替え</li>



<li><strong>Button</strong>：変更を適用（Apply）</li>



<li><strong>Screen クラス</strong>：画面表示の制御</li>



<li><strong>QualitySettings クラス</strong>：品質・VSync設定</li>
</ul>



<p>Toggleは「今どうしたいか」を表し、<br><strong>実際の反映はApplyボタンで行う</strong>、という役割分担を意識します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc11">フルスクリーン設定の基本</span></h3>



<p>フルスクリーンの切り替えは、<br><strong><code>Screen.fullScreen</code></strong> を使って制御できます。</p>



<p>考え方はとてもシンプルで、</p>



<ul class="wp-block-list">
<li>ToggleがON → フルスクリーンにしたい</li>



<li>ToggleがOFF → ウィンドウ表示にしたい</li>
</ul>



<p>という状態を、Apply時に反映させるだけです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">起動時・表示時の初期化</h4>



<p>設定画面を開いたときは、<br><strong>現在の画面状態をそのままToggleに反映</strong>させます。</p>



<p>例えば、フルスクリーン用Toggle（fullscreenToggle）がある場合、</p>



<ul class="wp-block-list">
<li><code>Screen.fullScreen</code> が true → ToggleをON</li>



<li>false → ToggleをOFF</li>
</ul>



<p>という関係になります。</p>



<p>これを忘れると、<br>「チェックは入っているのに画面はウィンドウ」といった違和感が生まれてしまいます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">VSync（垂直同期）の設定</span></h3>



<p>VSyncは、<br><strong>フレームレートとモニターの同期</strong>を制御する設定です。</p>



<p>Unityでは、<strong><code>QualitySettings.vSyncCount</code></strong> を使って設定します。</p>



<ul class="wp-block-list">
<li>VSync ON → <code>QualitySettings.vSyncCount = 1</code></li>



<li>VSync OFF → <code>QualitySettings.vSyncCount = 0</code></li>
</ul>



<p>こちらもToggleと非常に相性が良い項目です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">VSyncの初期状態をToggleに反映する</h4>



<p>VSyncの場合は少しだけ注意が必要です。</p>



<p><code>QualitySettings.vSyncCount</code> は数値なので、</p>



<ul class="wp-block-list">
<li>0 → OFF</li>



<li>1以上 → ON</li>
</ul>



<p>というルールでToggleに反映します。</p>



<p>これにより、現在の品質設定とUIの表示を正しく同期できます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">Applyボタンでまとめて反映する</span></h3>



<p>フルスクリーンとVSyncは、<br><strong>Applyボタンを押したタイミングでまとめて反映</strong>するのがおすすめです。</p>



<p>Applyボタンの処理では、</p>



<ul class="wp-block-list">
<li>フルスクリーンToggleの状態を取得</li>



<li><code>Screen.fullScreen</code> に反映</li>



<li>VSync Toggleの状態を取得</li>



<li><code>QualitySettings.vSyncCount</code> を設定</li>
</ul>



<p>という流れになります。</p>



<p>こうしておくことで、</p>



<ul class="wp-block-list">
<li>誤操作による画面トラブルを防げる</li>



<li>複数設定を一度に適用できる</li>



<li>保存処理とまとめやすい</li>
</ul>



<p>といったメリットがあります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次の章では、<br><strong>解像度設定</strong>を例に、もう一段階踏み込んだOptions実装を見ていきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc14">解像度設定を実装する（左右ボタン＋Apply方式）</span></h2>



<p>次は、設定画面の中でも「実装の難易度が少し上がる」<br><strong>解像度（Resolution）</strong>に挑戦していきます。</p>



<p>解像度はプレイヤーの環境によって最適解が変わるため、<br>Optionsで調整できるようにしておくとUXが一気に上がります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc15">解像度設定で押さえるべき考え方</span></h3>



<p>解像度設定は、フルスクリーンToggleと違って<br>「候補の中から選ぶ」タイプの設定です。</p>



<p>そのため、実装では次の2つを管理する必要があります。</p>



<ul class="wp-block-list">
<li><strong>解像度の候補リスト</strong>（例：1920&#215;1080 / 1280&#215;720 など）</li>



<li><strong>現在選択している候補のインデックス</strong>（selectedRes）</li>
</ul>



<p>そして重要なのが、前の章と同じく<br><strong>選択した瞬間に反映しない（Apply方式）</strong>という点です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">解像度情報を管理する方法（インスペクターで編集できる形）</span></h3>



<p>解像度の候補は、Unityのインスペクターで編集できるようにしておくと便利です。<br>そのために、幅と高さを持つシンプルなクラスを用意します。</p>



<p>ポイントは次の2つです。</p>



<ul class="wp-block-list">
<li><strong>[System.Serializable]</strong> を付ける（インスペクター表示のため）</li>



<li><strong>MonoBehaviourを継承しない</strong>（ただのデータとして扱う）</li>
</ul>



<p>こうしておけば、設定スクリプト側で</p>



<ul class="wp-block-list">
<li>解像度配列（resolutions）をpublicで持つ</li>



<li>インスペクターで候補解像度を追加できる</li>
</ul>



<p>という運用ができます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">UI：左右ボタンで解像度を切り替える</span></h3>



<p>解像度のUIは、よくある形として</p>



<ul class="wp-block-list">
<li>左ボタン（&lt;）</li>



<li>解像度表示テキスト（例：1920 x 1080）</li>



<li>右ボタン（&gt;）</li>
</ul>



<p>の構成が分かりやすいです。</p>



<p>左右ボタンが押されたら、<strong>selectedRes</strong> を増減し、<br>そのたびに表示テキストを更新します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">インデックスの範囲チェックが重要</h4>



<p>ここでミスりやすいのが、インデックスの範囲外アクセスです。</p>



<ul class="wp-block-list">
<li>左に行きすぎて -1 になる</li>



<li>右に行きすぎて配列の長さを超える</li>
</ul>



<p>そのため、左右ボタンでは必ず</p>



<ul class="wp-block-list">
<li>0未満にならない</li>



<li>resolutions.Length &#8211; 1 を超えない</li>
</ul>



<p>という制限を入れておきます。<br>この1行があるだけで、解像度周りのエラーが激減します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">起動時（または設定画面を開いたとき）の初期化</span></h3>



<p>設定画面を開いた瞬間に、<br><strong>現在の解像度がUIに反映されている</strong>状態にしたいですよね。</p>



<p>そこで、起動時や表示時に</p>



<ul class="wp-block-list">
<li>resolutions配列をループ</li>



<li>Screen.width / Screen.height と一致する要素を探す</li>



<li>一致したインデックスを selectedRes に入れる</li>



<li>表示テキストを更新する</li>
</ul>



<p>という初期化を行います。</p>



<p>もし一致する候補が見つからない場合は、<br>「一番近い解像度」や「デフォルト候補」に寄せる、という設計にしておくと安心です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">Applyで解像度を反映する（Screen.SetResolution）</span></h3>



<p>選択した解像度を反映するときは、<br><strong><code>Screen.SetResolution(width, height, isFullscreen)</code></strong> を使います。</p>



<p>ここで大事なのが、第3引数の <strong>isFullscreen</strong> です。</p>



<p>解像度を変えるタイミングで、フルスクリーン状態も一緒に指定できるので、<br>Apply時には</p>



<ul class="wp-block-list">
<li>選択中の解像度（selectedRes）から width / height を取得</li>



<li>fullscreenToggle.isOn を第3引数に渡す</li>
</ul>



<p>という形にしておくと整合性が取れます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>ここまでで、画面設定の中心である</p>



<ul class="wp-block-list">
<li>フルスクリーン</li>



<li>VSync</li>



<li>解像度</li>
</ul>



<p>が「Apply方式」で実装できる形になります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、プレイヤーが最も触ることが多い<strong>音量設定</strong>です。<br>まずは簡単な方法から入り、AudioMixerを使った本格管理まで一気に解説していきます。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc20">音量設定を実装する（シンプル版 → AudioMixer版）</span></h2>



<p>設定画面で一番触られやすいのが、実は<strong>音量</strong>です。<br>ゲーム起動直後に「うるっ…！」となった瞬間、プレイヤーは反射的に音量を探します😇</p>



<p>ここでサクッと調整できるだけで、体験の快適さがかなり変わります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">方法1：とにかく簡単に作る（AudioListener.volume）</span></h3>



<p>まず、<strong>ゲーム全体のマスターボリューム</strong>だけ調整できればOK、という場合は<br><code>AudioListener.volume</code> を使うのが最短です。</p>



<p>実装イメージは次のとおりです。</p>



<ul class="wp-block-list">
<li>UIに<strong>Slider（0〜1）</strong>を用意</li>



<li>Sliderの値を <code>AudioListener.volume</code> に代入</li>



<li>値を <code>PlayerPrefs</code> に保存して次回起動時に復元</li>
</ul>



<p>「まずは動く設定画面が欲しい！」という段階なら、この方式でも十分役に立ちます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">保存・復元のポイント（PlayerPrefs）</h4>



<p>音量は、<strong>設定画面を閉じたら元に戻ってしまう</strong>とガッカリされがちです。<br>なので、少なくとも</p>



<ul class="wp-block-list">
<li>Apply時（またはスライダー変更時）に保存</li>



<li>起動時（または設定画面を開いた時）に復元してSliderに反映</li>
</ul>



<p>の流れは用意しておくのがおすすめです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc22">方法2：BGM/SEを分けて管理する（AudioMixer）</span></h3>



<p>次に、本格的にやるなら<strong>AudioMixer</strong>です。<br>BGMとSEを分けて音量調整できるようにしたい場合、ほぼ必須になります。</p>



<p>AudioMixer方式のメリットは大きく、</p>



<ul class="wp-block-list">
<li><strong>BGM/SE/環境音</strong>などを別々に調整できる</li>



<li>音の演出（フィルター、ダッキングなど）も組み込みやすい</li>



<li>後から項目を増やしても破綻しにくい</li>
</ul>



<p>という「設定画面の拡張性」が手に入ります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">AudioMixer実装のざっくり手順</h4>



<p>AudioMixerを使った音量設定は、流れをつかめば怖くありません。<br>手順はだいたい次の順番です。</p>



<ul class="wp-block-list">
<li>プロジェクトで<strong>Audio Mixer</strong>アセットを作成</li>



<li>Masterの下に <strong>BGM / SE</strong> などのグループを作る</li>



<li>各AudioSourceのOutputを対応するグループに設定</li>



<li>BGM/SEグループのVolumeを<strong>Expose Parameter</strong>する</li>



<li>スクリプトから <code>AudioMixer.SetFloat()</code> で音量を反映</li>
</ul>



<p>ここまでできれば、設定画面からBGMとSEを別々に操作できます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">スライダー値（0〜1）をdBに変換する理由</h4>



<p>AudioMixerのVolumeは、基本的に<strong>dB（デシベル）</strong>で制御します。<br>理由はシンプルで、人の耳は音の変化を<strong>線形ではなく対数的</strong>に感じるからです。</p>



<p>そのため、スライダーの値（0〜1）をdBに変換するのが一般的です。</p>



<ul class="wp-block-list">
<li>変換例：<code>20 * Mathf.Log10(value)</code></li>



<li>無音側は -80dB 付近まで落とす（実質ミュート）</li>
</ul>



<p>この変換を入れると、「音量が自然に変わる」感覚になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">サウンドダッキング（Ducking）もAudioMixerでできる</span></h3>



<p>ちょっと上級編ですが、AudioMixerでは<strong>ダッキング</strong>も設定できます。<br>例えば</p>



<ul class="wp-block-list">
<li>SEが鳴った瞬間だけBGMを少し下げる</li>
</ul>



<p>といった演出が可能です。<br>地味ですが、これがあるとゲームの“プロっぽさ”が上がります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">音管理をもっと楽にしたい人向け（1回だけ紹介）</span></h3>



<p>AudioMixer方式は強力ですが、運用が増えるほど管理も大変になります。<br>「音の管理をまとめてラクにしたい」「スクリプト増やしたくない…」という場合は、専用アセットを使うのも手です。</p>



<p><strong>Audio Manager Pro</strong><br><a rel="noopener" target="_blank" href="https://prf.hn/click/camref:1101lqFpE/destination:https://assetstore.unity.com/packages/tools/audio/audio-manager-pro-96011">✅ Asset Storeでチェックする</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次の章では、ここまで作った設定を<strong>保存・復元（PlayerPrefs）</strong>して、<br>「起動したら前回の設定が反映されている」状態まで仕上げていきます。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc25">設定を保存・復元する（PlayerPrefsで永続化）</span></h2>



<p>ここまでで、音量・解像度・フルスクリーン・VSyncといった設定項目は実装できました。<br>でも、もしゲームを再起動したら設定が初期化されてしまったら……ちょっと悲しいですよね🥲</p>



<p>そこで次は、<strong>設定内容を保存して、次回起動時に復元する</strong>仕組みを作ります。<br>小〜中規模のゲームなら、まずは <strong>PlayerPrefs</strong> で十分実用になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc26">PlayerPrefsでできること（できないこと）</span></h3>



<p>PlayerPrefsは、Unityに標準で用意されている「簡易セーブ領域」です。<br>数値や文字列をキー（名前）で保存でき、Windows/MacなどのPCでも問題なく動きます。</p>



<ul class="wp-block-list">
<li><strong>保存できる</strong>：int / float / string</li>



<li><strong>向いている</strong>：音量、解像度インデックス、ON/OFF設定など</li>



<li><strong>向いていない</strong>：大量データ、暗号化が必要なデータ、複雑な構造</li>
</ul>



<p>今回のOptions用途は、まさにPlayerPrefsの得意分野です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc27">保存の基本方針：Apply時にまとめて保存する</span></h3>



<p>おすすめは、<strong>「変更を適用（Apply）」ボタンを押したタイミングで</strong><br>反映と保存をセットで行う設計です。</p>



<p>こうしておくと、</p>



<ul class="wp-block-list">
<li>UIで選んだだけの「未適用」状態を誤って保存しない</li>



<li>保存漏れが起きにくい</li>



<li>処理の流れが読みやすい</li>
</ul>



<p>というメリットがあります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc28">保存するキー設計（例）</span></h3>



<p>PlayerPrefsは「キー名」が命なので、<br>最初にルールを決めておくと後から混乱しません。</p>



<p>例として、こんなキー設計が使いやすいです。</p>



<ul class="wp-block-list">
<li>音量（マスター）：<code>opt_volume_master</code></li>



<li>BGM音量：<code>opt_volume_bgm</code></li>



<li>SE音量：<code>opt_volume_se</code></li>



<li>フルスクリーン：<code>opt_fullscreen</code>（0/1）</li>



<li>VSync：<code>opt_vsync</code>（0/1）</li>



<li>解像度：<code>opt_resolution_index</code>（候補配列のindex）</li>
</ul>



<p>「opt_」のように接頭辞を付けると、他の保存データと衝突しにくくなります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc29">復元の基本方針：起動時（または設定画面表示時）にUIへ反映</span></h3>



<p>保存ができたら、次は復元です。<br>復元で大事なのは、<strong>値を読み込むだけで終わらせない</strong>こと。</p>



<p>プレイヤーが設定画面を開いたときに、</p>



<ul class="wp-block-list">
<li>Toggleが現在の設定を正しく表示している</li>



<li>Sliderが保存した音量になっている</li>



<li>解像度表示が前回の選択に一致している</li>
</ul>



<p>という状態にして、初めて「設定が生きてる」感が出ます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">GetXXXのデフォルト値を必ず用意する</h4>



<p>初回起動では、PlayerPrefsに値が入っていません。<br>そのため、<code>GetInt</code> や <code>GetFloat</code> には<strong>デフォルト値</strong>を入れます。</p>



<ul class="wp-block-list">
<li>音量：<code>1.0</code>（最大）</li>



<li>フルスクリーン：端末や方針に合わせて <code>0</code> or <code>1</code></li>



<li>VSync：パフォーマンス方針に合わせて</li>



<li>解像度：<code>0</code>（候補配列の先頭）など</li>
</ul>



<p>これを決めておくと、初期状態の挙動が安定します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">「リセット（初期化）」ボタンを用意すると親切</span></h3>



<p>設定画面には、できれば<strong>初期化（Reset）</strong>も付けておくと安心です。</p>



<ul class="wp-block-list">
<li>音量が変になった</li>



<li>解像度をミスって見づらくなった</li>



<li>いろいろ触って戻したい</li>
</ul>



<p>こういうときに、ワンボタンで戻せるとUXが上がります。</p>



<p>実装としては、</p>



<ul class="wp-block-list">
<li>UIをデフォルト値に戻す</li>



<li>Applyを呼ぶ（反映）</li>



<li>PlayerPrefsもデフォルトで上書き保存</li>
</ul>



<p>までセットにすると、ズレが起きにくいです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>これで、Options画面は「変更できる」だけでなく、<br><strong>次回起動でも維持される</strong>実用レベルになります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次の章では、設定画面の中でも一番沼りやすい<strong>キーコンフィグ（キー設定）</strong>について、<br>破綻しにくい設計方針から整理していきます。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc31">キーコンフィグ（キー設定）を実装する考え方（破綻しない設計）</span></h2>



<p>設定画面の中でも、いちばん「作る前は簡単そうに見えて、作り始めると沼」なのが<br><strong>キーコンフィグ（キー設定）</strong>です。</p>



<p>音量や解像度は「値を変えるだけ」ですが、キー設定は</p>



<ul class="wp-block-list">
<li>入力の競合（同じキーが2つに割り当たる）</li>



<li>待機状態（次に押したキーを割り当てたい）</li>



<li>保存と復元</li>



<li>入力方式の差（旧Input / 新Input System / ゲームパッド）</li>
</ul>



<p>など、扱う要素が一気に増えます。<br>なので、ここは<strong>「方針（設計）→ 実装」</strong>の順で考えるのがおすすめです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc32">Input.GetKeyの直書きは後で詰む</span></h3>



<p>例えば、移動を</p>



<ul class="wp-block-list">
<li><code>Input.GetKey(KeyCode.W)</code></li>



<li><code>Input.GetKey(KeyCode.A)</code></li>
</ul>



<p>のようにゲーム全体へ直書きしてしまうと、<br>キー設定を変更した瞬間に<strong>書き換え箇所が爆発</strong>します。</p>



<p>なので、キーコンフィグをやるなら大前提として</p>



<p><strong>「ゲーム側はKeyCodeを直接参照しない」</strong></p>



<p>というルールを作るのが安全です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc33">ラッパー関数（入力の窓口）を作る</span></h3>



<p>おすすめは、入力判定をまとめる「窓口」を用意する方法です。<br>例えば考え方としては、</p>



<ul class="wp-block-list">
<li>ゲーム側：<strong>MoveForwardが押されてる？</strong> を聞く</li>



<li>入力側：MoveForwardに割り当てられたキーのどれかが押されたか判定する</li>
</ul>



<p>という役割分担です。</p>



<p>具体的には、</p>



<ul class="wp-block-list">
<li>「アクション名」→「割り当てキー（KeyCode）」を管理する</li>



<li>ゲーム側は <code>GetKey("MoveForward")</code> のように問い合わせる</li>
</ul>



<p>という設計にすると、キー変更の影響範囲を最小化できます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc34">「List&lt;KeyCode&gt;」で複数割り当てを許可すると強い</span></h3>



<p>キー設定は、ひとつの操作に対して</p>



<ul class="wp-block-list">
<li>キーボードの複数キー</li>



<li>ゲームパッドのボタン</li>
</ul>



<p>など、複数割り当てしたくなるケースがよくあります。</p>



<p>そこで、1操作につき1キーではなく、<br><strong>1操作につき複数キー（リスト）</strong>を持つ設計にしておくと拡張が楽です。</p>



<p>そしてラッパー関数側で</p>



<ul class="wp-block-list">
<li>リスト内のKeyCodeを順番にチェック</li>



<li>どれかが押されていればtrue</li>
</ul>



<p>という形にします。</p>



<p>この設計にすると、将来的に</p>



<ul class="wp-block-list">
<li>キーボード＋ゲームパッド併用</li>



<li>左右利きに合わせたプリセット</li>
</ul>



<p>などにも対応しやすくなります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc35">キー割り当てUIの基本（待機 → 取得 → 反映）</span></h3>



<p>キーコンフィグUIは、基本的に次の状態遷移になります。</p>



<ol class="wp-block-list">
<li><strong>変更ボタンを押す</strong>（例：「ジャンプ」横の「変更」）</li>



<li><strong>待機状態に入る</strong>（「キーを押してください…」表示）</li>



<li><strong>次に押されたキーを取得</strong></li>



<li><strong>割り当てを更新</strong>（競合チェックもここで）</li>



<li><strong>表示を更新</strong>（ボタン横に新しいキー名を出す）</li>
</ol>



<p>つまり、キー設定は「入力を読む場所」が通常プレイ時と少し違います。<br>この待機状態をどう管理するかが、実装の肝になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc36">競合（同じキーが他に使われている）をどう扱う？</span></h3>



<p>実用面で必ず出るのが、キーの競合です。<br>例えば「ジャンプ」をSpaceに変えようとしたら、すでに「決定」がSpaceだった、みたいな状況ですね。</p>



<p>対応方法は主に3つあります。</p>



<ul class="wp-block-list">
<li><strong>上書き</strong>：既存の割り当てを外して新しい操作へ付け替える</li>



<li><strong>拒否</strong>：競合しているので変更できません、と表示して戻す</li>



<li><strong>確認</strong>：上書きしますか？とダイアログを出す</li>
</ul>



<p>UX的には、<strong>確認ダイアログ方式</strong>が一番親切です。<br>ただし、実装が面倒なら「拒否」でも最低限成立します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc37">保存・復元は「KeyCodeをintで保存」するのが手堅い</span></h3>



<p>PlayerPrefsで保存する場合、KeyCodeは列挙型なので<br><strong>intに変換して保存</strong>するのが扱いやすいです。</p>



<ul class="wp-block-list">
<li>保存：KeyCode → int → PlayerPrefs</li>



<li>復元：int → KeyCode に戻して割り当て</li>
</ul>



<p>複数割り当て（List）をする場合は、JSON化するか、キー名を分割して保存するなど工夫が必要になります。<br>（ここは記事後半で、実装の選択肢として整理すると読者に親切です）</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>キーコンフィグは、いきなり完璧を目指すと大変なので、<br>まずは<strong>「入力の窓口（ラッパー）」を作る</strong>ことから始めるのが一番おすすめです。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc38">設定画面を全部自作する前に知っておきたい現実的な選択肢</span></h2>



<p>ここまで読んで、「なるほど、仕組みは分かったけど……」と感じた方も多いと思います。<br>そう、<strong>設定画面（Options）は地味に工数が重い</strong>んですよね。</p>



<p>音量、解像度、フルスクリーン、VSync、キー設定、保存処理、UI更新……<br>一つひとつは難しくなくても、<strong>積み上げるとかなりの作業量</strong>になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc39">設定画面は「完成して当たり前」な機能</span></h3>



<p>設定画面は、プレイヤーからすると</p>



<ul class="wp-block-list">
<li>あって当たり前</li>



<li>ちゃんと動いて当たり前</li>



<li>不具合があると一気に評価が下がる</li>
</ul>



<p>という、わりとシビアな機能です。</p>



<p>しかも、ここに時間をかけても<br><strong>ゲームの見た目や面白さが直接伸びるわけではありません</strong>。</p>



<p>だからこそ、個人開発や小規模チームでは</p>



<p><strong>「自作にこだわらない」</strong><br><strong>「完成形を使って時間を別に回す」</strong></p>



<p>という判断が、結果的にクオリティを上げることも多いです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc40">Options画面を一気に完成させたい人向けの選択肢</span></h3>



<p>ここまで解説してきた内容を、<br><strong>最初から一通りそろった形で使える</strong>アセットも存在します。</p>



<p>UI・処理・保存がセットになっているため、<br>「設定画面だけで数日溶ける…」という状況を避けたい場合には、かなり有効です。</p>



<p><strong>Settings &amp; Options Menu Creator &#8211; Complete Bundle</strong><br><a rel="noopener" target="_blank" href="https://prf.hn/click/camref:1101lqFpE/destination:https://assetstore.unity.com/packages/tools/gui/settings-options-menu-creator-complete-bundle-275522">✅ Asset Storeでチェックする</a></p>



<p>この手のアセットは、</p>



<ul class="wp-block-list">
<li>音量（AudioMixer対応）</li>



<li>解像度・フルスクリーン・VSync</li>



<li>キー設定</li>



<li>設定の保存・復元</li>
</ul>



<p>といった「まさに今まで解説してきた要素」が、<br><strong>すでに動く形で用意されている</strong>のが強みです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc41">自作とアセット、どちらを選ぶべき？</span></h3>



<p>迷ったら、次の基準で考えると判断しやすくなります。</p>



<ul class="wp-block-list">
<li><strong>学習目的</strong> → 自作（仕組みを理解できる）</li>



<li><strong>個人開発・短期開発</strong> → アセット（完成度と速度を優先）</li>



<li><strong>将来の拡張や独自仕様</strong> → 自作ベース＋部分的にアセット</li>
</ul>



<p>どちらが正解というより、<br><strong>「今のプロジェクトで何を優先するか」</strong>が大切です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次の章では、設定画面を作るときに見落としがちな<br><strong>ビルド時のデフォルト設定（Player Settings）</strong>について整理していきます。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc42">ビルド時のデフォルト設定を見直す（Player Settings）</span></h2>



<p>設定画面（Options）をしっかり作っていても、<br><strong>ビルド時の初期設定がズレている</strong>と、プレイヤーに違和感を与えてしまいます。</p>



<p>そこでこの章では、Unityエディター側で設定しておくべき<br><strong>Player Settings（ビルド時のデフォルト挙動）</strong>を整理しておきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc43">Player Settingsは「初回起動時の体験」を決める</span></h3>



<p>Player Settingsは、ゲームを<strong>初めて起動した瞬間</strong>の状態を決める場所です。</p>



<p>まだPlayerPrefsに保存データが存在しない状態では、</p>



<ul class="wp-block-list">
<li>どの解像度で起動するか</li>



<li>フルスクリーンかウィンドウか</li>



<li>ウィンドウサイズを変更できるか</li>
</ul>



<p>といった挙動は、すべてここでの設定が基準になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc44">設定場所：Resolution and Presentation</span></h3>



<p>Player Settingsは、次の場所から開けます。</p>



<ul class="wp-block-list">
<li><strong>Edit</strong> → <strong>Project Settings</strong></li>



<li><strong>Player</strong> → <strong>Resolution and Presentation</strong></li>
</ul>



<p>PC（Windows / macOS）向けゲームでは、<br>この項目がOptions画面の挙動と特に密接に関係します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc45">Fullscreen Modeの選び方</span></h3>



<p>Fullscreen Modeには、いくつか種類があります。</p>



<ul class="wp-block-list">
<li><strong>Exclusive Fullscreen</strong></li>



<li><strong>Fullscreen Window</strong>（ボーダーレス）</li>



<li><strong>Maximized Window</strong></li>



<li><strong>Windowed</strong></li>
</ul>



<p>それぞれ特徴がありますが、<br><strong>現在の主流は「Fullscreen Window」</strong>です。</p>



<p>理由はシンプルで、</p>



<ul class="wp-block-list">
<li>Alt+Tab の切り替えが速い</li>



<li>画面が暗転しにくい</li>



<li>トラブルが少ない</li>
</ul>



<p>というメリットがあるからです。</p>



<p>Exclusive Fullscreenはパフォーマンス面では有利ですが、<br>切り替え時の挙動が重く、Windows限定という点には注意が必要です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc46">Default Screen Width / Height</span></h3>



<p>Windowedモードで起動した場合の、<br><strong>初期ウィンドウサイズ</strong>を指定する項目です。</p>



<p>ここは</p>



<ul class="wp-block-list">
<li>1280 × 720</li>



<li>1600 × 900</li>



<li>1920 × 1080</li>
</ul>



<p>など、ゲームのターゲットに合わせて決めておくと安心です。</p>



<p>フルスクリーン前提のゲームでも、<br>一瞬ウィンドウ表示になるケースがあるため、<br>極端に小さい値は避けたほうが無難です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc47">Resizable Window と Allow Fullscreen Switch</span></h3>



<p>この2つは、Options画面との相性がとても重要です。</p>



<ul class="wp-block-list">
<li><strong>Resizable Window</strong> → ユーザーがウィンドウサイズを変更できるか</li>



<li><strong>Allow Fullscreen Switch</strong> → OS標準の全画面切り替え（例：F11）を許可するか</li>
</ul>



<p>Options画面で</p>



<ul class="wp-block-list">
<li>解像度変更</li>



<li>フルスクリーン切り替え</li>
</ul>



<p>を実装している場合は、<br><strong>この2つを有効にしておく</strong>のが基本です。</p>



<p>逆に、UIが崩れるのを避けたい場合などは、<br>あえてResizable WindowをOFFにする、という判断もあります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc48">Supported Aspect Ratios（アスペクト比）</span></h3>



<p>起動時に表示される解像度候補を、<br><strong>特定のアスペクト比に制限</strong>することもできます。</p>



<p>例えば、</p>



<ul class="wp-block-list">
<li>16:9のみ対応</li>



<li>16:10や21:9を許可</li>
</ul>



<p>といった方針がある場合は、<br>ここでチェックを整理しておくと事故が減ります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://cbagames.jp/wp-content/uploads/2025/03/83d12b8a8533b058a9819647d57abab4-150x150.webp" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Options画面とPlayer Settingsは、<br><strong>どちらか一方だけ正しくてもダメ</strong>で、必ずセットで考える必要があります。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2751471242"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc49">まとめ｜Unityの設定画面（Options）実装で押さえるべきポイント</span></h2>



<p>この記事では、Unityで<strong>実用レベルの設定画面（Options）</strong>を実装するために、<br>設計の考え方から具体的な実装方針までを順番に整理してきました。</p>



<p>最後に、特に重要なポイントを振り返っておきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc50">設定画面は「UXを支える基盤機能」</span></h3>



<p>設定画面は、ゲームの面白さを直接押し上げる機能ではありません。<br>しかし、<strong>不便だと確実に評価を下げる</strong>、とても影響力の大きい要素です。</p>



<ul class="wp-block-list">
<li>音量がすぐ調整できる</li>



<li>解像度や表示モードを自由に変えられる</li>



<li>設定が次回起動でもきちんと反映される</li>
</ul>



<p>これだけで、ゲーム全体の「丁寧さ」が伝わります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc51">Apply方式と「選択中 / 適用中」の分離が安定のカギ</span></h3>



<p>解像度やフルスクリーン設定では、<br><strong>変更した瞬間に反映しない</strong>設計がとても重要でした。</p>



<ul class="wp-block-list">
<li>UI操作 → 一時的に値を保持</li>



<li>Applyボタン → まとめて反映＆保存</li>
</ul>



<p>この流れを守ることで、</p>



<ul class="wp-block-list">
<li>画面が見えなくなる事故を防げる</li>



<li>保存漏れが起きにくい</li>



<li>設定項目を後から追加しやすい</li>
</ul>



<p>といったメリットが得られます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc52">音量・入力・保存は「最初に設計」しておく</span></h3>



<p>音量設定やキーコンフィグは、後から追加しようとすると一気に複雑になります。</p>



<ul class="wp-block-list">
<li>音量は AudioMixer を前提に考えるか</li>



<li>入力はラッパー関数経由にするか</li>



<li>保存キーの命名ルールをどうするか</li>
</ul>



<p>こうした点を<strong>最初に軽くでも決めておく</strong>だけで、実装の負担はかなり減ります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc53">自作かアセットかは「目的」で決めていい</span></h3>



<p>設定画面は、自作して学ぶ価値も高いですが、<br>すべてのプロジェクトで自作が正解とは限りません。</p>



<ul class="wp-block-list">
<li>仕組みを理解したい → 自作</li>



<li>短期間で完成させたい → アセット活用</li>



<li>独自仕様が多い → 自作＋部分的にアセット</li>
</ul>



<p><strong>今のプロジェクトで何を優先したいか</strong>を基準に選ぶのが、一番後悔が少ないです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc54">Player SettingsとOptionsは必ずセットで考える</span></h3>



<p>Unityエディター側の<strong>Player Settings</strong>は、<br>初回起動時の体験を大きく左右します。</p>



<p>Options画面を作ったら、</p>



<ul class="wp-block-list">
<li>Fullscreen Mode</li>



<li>初期解像度</li>



<li>ウィンドウの挙動</li>
</ul>



<p>が噛み合っているか、必ず確認しておきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>設定画面は地味ですが、<br><strong>「ちゃんと作ってあるゲーム」は、それだけで信頼されます。</strong></p>



<p>この記事が、UnityでOptions画面を実装するときの<br>迷いや手戻りを減らす手助けになればうれしいです。</p>



<p>あとは実際に手を動かしながら、<br>自分のゲームに合った形へ少しずつ調整していきましょう 😊</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc55">あわせて読みたい</span></h3>



<p>設定画面（Options）を実装するうえで、<br>一緒に読んでおくと理解が深まる関連記事をまとめました。</p>



<ul class="wp-block-list">
<li><a target="_self" href="https://cbagames.jp/2025/02/17/unity-serializable-scriptableobject-data-management/">Unityのデータ管理を最適化！SerializableとScriptableObjectの違いと活用法</a></li>



<li><a target="_self" href="https://cbagames.jp/2024/12/13/unitynosoundtroubleshooting/">Unityで音が鳴らない問題を解決！サウンド設定とスクリプト確認法</a></li>



<li><a target="_self" href="https://cbagames.jp/2024/12/12/unityuiuinotshowing/">UnityのUIが表示されない問題を解決！初心者にありがちなミスと修正法</a></li>



<li><a target="_self" href="https://cbagames.jp/2025/05/31/unity-input-system-beginner-guide21/">Unityの新Input Systemの使い方完全ガイド｜キーボード・ゲームパッド対応</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc56">参考文献・参考リンク</span></h3>



<ul class="wp-block-list">
<li><a rel="noopener" target="_blank" href="https://docs.unity3d.com/ja/2022.1/Manual/playersettings-windows.html">Unity公式｜Windows向けPlayer Settings（解像度・表示設定）</a></li>



<li><a rel="noopener" target="_blank" href="https://soft-rime.com/post-12058/">Soft-Rime｜Unityで設定画面（Options）を作るときに知っておきたいこと</a></li>



<li><a rel="noopener" target="_blank" href="https://teratail.com/questions/231870">teratail Q&amp;A｜Unity解像度設定とPlayerPrefsについて</a></li>



<li><a rel="noopener" target="_blank" href="https://uhiyama-lab.com/ja/notes/unity/unity-resolution-fullscreen-settings/">Uhiyama-Lab｜Unity Resolution/Fullscreenの設定方法まとめ</a></li>



<li><a rel="noopener" target="_blank" href="https://qiita.com/konnbu/items/2b37afd9d98ac4a2cb31">Qiita｜Unityで解像度とフルスクリーン設定を実装する手順</a></li>



<li><a rel="noopener" target="_blank" href="https://discussions.unity.com/t/how-do-you-make-an-options-menu/737159">Unity公式フォーラム（英語）｜Optionsメニューの実装例ディスカッション</a></li>



<li><a rel="noopener" target="_blank" href="https://discussions.unity.com/t/settings-game-options/905251">Unity公式フォーラム（英語）｜Settings/Game Options に関する応用例</a></li>



<li><a rel="noopener" target="_blank" href="https://www.youtube.com/watch?v=iSHk72x1a2M">YouTube｜UnityでSettings画面を作るチュートリアル（解像度・UI連携）</a></li>



<li><a rel="noopener" target="_blank" href="https://www.youtube.com/watch?v=kjAKfapeTU8">YouTube｜UnityでUI設定メニューを作成する基礎解説動画</a></li>
</ul>



<h2 class="wp-block-heading"><span id="toc57">よくある質問（FAQ）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">設定変更はリアルタイム反映とApply方式、どちらが正解ですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>設定項目によって使い分けるのが正解です。</p>



<ul class="wp-block-list">
<li><strong>音量</strong>：リアルタイム反映（Slider操作と同時）</li>



<li><strong>解像度・フルスクリーン</strong>：Apply方式</li>
</ul>



<p>特に解像度や表示モードは、即時反映すると画面が見えなくなるリスクがあるため、<br>Applyボタンでまとめて反映する設計が推奨されます。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">PlayerPrefsは商用ゲームでも使って大丈夫ですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>はい、<strong>設定保存用途であれば問題ありません</strong>。</p>



<p>音量・解像度・ON/OFF設定などの軽量データは、<br>PlayerPrefsが最も手軽で安定した選択肢です。</p>



<p>ただし、セーブデータ本体や改ざん対策が必要な情報には向いていないため、<br>用途を限定して使うのがポイントです。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">新Input Systemを使っている場合も、この記事の考え方は使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>使えます。むしろ<strong>ラッパー関数を用意する設計</strong>は、新Input Systemと相性が良いです。</p>



<p>入力処理を直接ゲームロジックに書かず、</p>



<ul class="wp-block-list">
<li>アクション名で問い合わせる</li>



<li>内部でInput SystemやKey割り当てを処理する</li>
</ul>



<p>という構成にしておくと、キーボード・ゲームパッド・将来の拡張にも対応しやすくなります。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://cbagames.jp/2025/12/15/unity-options-settings-implementation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
