自作のコンフィグ画面に必要なもの

起動前のダイアログ

WindowsやMac向けにビルドすると、ゲーム起動前に以下のようなウィンドウサイズや画質、入力をコンフィグするダイアログが表示される。

コンフィグダイアログ

これはこれで機能は満たしているものの、ゲーム起動前にこれが毎回起動するのも鬱陶しい。できればゲーム内で設定させたい。
そこで、ゲーム内にこの機能を実装するのに必要なメソッドなどを調べた。

デフォルト値の設定

起動前のダイアログはPlayer Settings の Display Resolution Dialog を Disabled にすれば起動時に表示されなくなる。
フルスクリーンや解像度のデフォルト値についても同様にここで設定できる。

ダイアログ非表示

しかし、フルスクリーンや解像度を変えてビルドして試していたとき、設定が反映されない現象にあった。どうやら前回の起動時の解像度やフルスクリーン設定は記憶されていて、それを適用するようだ。
どこに保存されているかというと、レジストリである(Windows)。
Display Resolution Dialog overwrites screen settings?にあるように、
レジストリの
HKEY_CURRENT_USER -> Software -> “Company Name” -> “Product Name”
に記憶されている(Company Name と Product Name はPlayerSettings で設定している値が入る)。
デフォルト設定を試したいときは、このレジストリの値を削除すれば良い。

スクリプトからフルスクリーンにする

Unity Manual - FullScreen
Screen.fullScreen に true を入れればフルスクリーンになるし、falseならウィンドウ。

解像度を変える

Unity Manual - SetResolution
Screen.SetResolution (640, 480, false) などのようにする。第3引数でフルスクリーンかウィンドウかを指定できる

以上2つをキーボードで試しに動かしてみた。うん。ちゃんと動く。

1
2
3
4
5
6
void Update () {
if (Input.GetKeyDown(KeyCode.F))Screen.fullScreen = !Screen.fullScreen;

if(Input.GetKeyDown(KeyCode.A))Screen.SetResolution (640, 480, false);
if(Input.GetKeyDown(KeyCode.S))Screen.SetResolution (1027, 768, false);
}

画質を変える

Unity - Scripting API: QualitySettings.SetQualityLevel
QualitySettings.SetQualityLevelを使えば良い。画質はindexで決まる。

  • 0 : Fastest
  • 1 : Fast
  • 2 : Simple
  • 3 : Good
  • 4 : Beautiful
  • 5 : Fantastic

キーコンフィグ

これが問題。実行中に変更することができない。
下記で示されてるように自作のInput Manager を作るか、アセットストアでそういったアセットを探すしかない。

Possible to remap input manager buttons/axes at runtime?
unity key remap runtime

確認バージョン

Unity 4.6

Unityカテゴリの記事
Color SpaceがLinearのときUIの透明度が正しくならない
History Inspectorの紹介
History Inspectorの紹介
敵AIとビジュアルスクリプティング
Chronosを使った感想
コンポーネントの順番をスクリプトから並び替える
Smart Inspectorの紹介
Kris' Favorite Assets が便利
キー操作でUIのナビゲーションをループさせる
TextMeshProのSprite Assetを更新する
UnityPhysicsDebugDraw2D が便利
色管理を考える
細かいTips
ビルドスクリプトを書く
AnimatorのCulling Modeでハマった話
Vectrosityを使ってUGUI上で線や円のアニメーションをする
スプレッドシートからjsonデータを読み込む
ビジュアルノベルアセットFungusにコマンドを追加してカスタマイズする
Skinned Mesh Renderer の Boundsについて
シーンごとにビルド結果の容量を出す
シーンビューにクオリティ設定のスライダーを出すエディタ拡張
ビルド結果のFile headersが大きい理由
フリーのビジュアルノベルアセットFungusを使ってRPGのイベントを作る
Move To View を改良する
フリーのビジュアルノベルアセットのFungusが便利
Visual Studio で保存時にフォーマットする
スプレッドシートからデータを読み込む
Easy Save2 で シリアライズされたクラスを保存する
ShaderでSpriteの色相をシフトする
Sprite、Texture の 色相をシフトする
uGUIのButtonをクリック時にハイライトのままになる
uGUIのCanvas Groupを使って透過処理をしたり、操作を制限する
uGUIでトグルなボタンを作る
uGUI で動的にボタンを作る
Easy Save2 を使ってみる
csv読み込んで ローカライズ
LoadLevelAdditive で共通シーンを加算
画面全体に色をかける
Any State でどこからでも遷移できるようにする
iTween のStop ではまる
sprite の multiple で 境界がおかしくなる
2D画面に線を引く Line Renderer
Renderer の Materials を スクリプトから設定する
背景をスクロールさせる