[unity]オプション画面を作る

以前このような記事を書いたのですが、

あまりにも漠然とした記事になってしまったので、反省をこめて今回の記事を書きました。
今回は以下のようなオプション画面を作ります。
マウス・キーボードどちらでも操作が可能、いくつでも項目が追加できるような設計にします。よければお使いください。

パースをつけてみる

大まかな設計

上はGameObject名、下はScript Class名

ROOT からまず赤い項目2つを上下で選択し、その後各赤い項目から選択できる緑の項目左右で選択します。

ダウンロード

まっさらな新規プロジェクトに、解凍した unitypackage をインポートしてください。

使い方

とりあえずオレンジの部分をインスペクタで変更すれば、お好みの表示に変えることが出来ます。

OptRoot

OptRoot は先ほどの図の赤い項目。
上下で選択する Full Screen(OptMember)Sound Volume(OptMember) をメンバーとしていれます。

もし、上下で選択する項目が増えた場合、Element を増やしてください。
また、登録した順番通りにフォーカスが移動するので、上からの表示順に登録するようにしてください。

OptMember

OptRootは緑の項目。
今度は左右で選択するメンバー (GameButton) を入れてください。(オレンジの箇所)

OnFetch, OnUpdate

選択された項目は、ただ選択されるだけではなく、ゲーム内にも情報を伝える必要があります。
そのクラスとして、次の単純なクラスを用意しました。

public class SaveData : MonoBehaviour
{
    public static bool FullScreen = false;
    public static float SoundVolume = 1;
}

FullScreen は Full Size が選択されると true、Windowed が選択されると false となります。
SoundVolume は Max なら 100、Half なら 50、Off なら 0 が入ります。

この数値のやりとりをするのが OnFetchOnUpdate イベントです。

OnFetch .. SaveData クラスの値を画面に反映させる
OnUpdate .. 画面の状態を SaveData クラスに反映させる

コードは OptRoot に書き、インスペクタでそのメソッドをリンクさせるのが基本的な使い方です。
以下は OptRoot に記述されたコード(抜粋)です。

/// <summary>
/// Inspector - OnFetch
/// </summary>
public void FetchFullScreen(OptMember.FetchArgs args)
{
    args.No = SaveData.FullScreen == true ? 0 : 1;
}

public void FetchSound(OptMember.FetchArgs args)
{
    if (SaveData.SoundVolume == 0)
    {
        args.No = 2;
    }
    else
    if (SaveData.SoundVolume == 50)
    {
        args.No = 1;
    }
    else
    {
        args.No = 0;
    }
}

/// <summary>
/// Inspector - OnUpdate
/// </summary>
public void UpdateFullScreen(int no)
{
    SaveData.FullScreen = no == 0 ? true : false;
}

public void UpdateSound(int no)
{
        if (no == 0)
        {
            SaveData.SoundVolume = 1;
        }
        else
        if (no == 1)
        {
            SaveData.SoundVolume = 0.5f;
        }
        else
        {
            SaveData.SoundVolume = 0;
        }
}

OnChange

あまり使う必要はないかもしれませんが、項目が選択された時、その状態を即反映したい場合があります。
今回の場合はフルスクリーン – ウィンドウ表示の切り替えがそれにあたります。選択肢を選んだ瞬間、切り替えを行います。
そのため、Full Screen では登録がありますが、Sound Volume では登録がありません。

Unity Editor では表示切替されません。Windows ビルド時のみ表示が切り替わることに注意してください。

/// <summary>
/// Inspector - OnChange
/// </summary>
public void ChangeFullScreen(int no)
{
    Screen.SetResolution(Screen.width, Screen.height, no == 0 ? true : false);
}

GameButton

UI/Button に置き換える場合は OptMember.csButtons の部分を書き換えてください。
(演出やデザインを)自分好みのボタンにしたい場合は、参考になるかもしれません。

CollisionStartup

ボタンにうっすら白く矩形の BOX が表示されていますが、これがユーザーの選択可能範囲となっています。これは実行時には表示が消えるため、製作者だけに選択可能範囲が見えています。

このオブジェクトについて、詳しくはこちらの記事をご覧ください。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA