ドロップダウンを使って設定を変更してシーンが変わる時に保存し、戻ってきた時にも同じ値が選択されているようにします。
まずドロップダウンを作って項目やイベントを設定します。
DropdownコンポーネントのValueが今選択されている項目のインデックス、Optionsが項目で、On Value Changedに項目が変更されたときに呼ぶメソッドを追加します。
Valueにインデックスを入れればその項目がドロップダウンの初期値として画面に表示されます。逆にドロップダウンで別の項目を選択するとValueの値が変わります。
Valueの値を保存し、開始時に取得するスクリプトを作ります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class StartMenuTest : MonoBehaviour
{
int res;
int width;
int height;
[SerializeField] Dropdown dropdown_res;
// Start is called before the first frame update
void Start()
{
res = PlayerPrefs.GetInt("RESOLUTION", 1); // 解像度をロード
SetResolution(res);
dropdown_res.value = res; // ドロップダウンの値を変更
}
public void SetResolution(int resInt)
{
switch(resInt)
{
case 0:
width = 1920;
height = 1080;
break;
case 1:
width = 1280;
height = 720;
break;
case 2:
width = 854;
height = 480;
break;
case 3:
width = 320;
height = 180;
break;
}
res = resInt;
}
public void QuitGame()
{
PlayerPrefs.SetInt("RESOLUTION", res); // 解像度をセーブ
SceneManager.LoadScene(5); // 戻る
}
public void StartGame()
{
Screen.SetResolution(width, height, FullScreenMode.FullScreenWindow); // 解像度を適用
SceneManager.LoadScene("Game"); // ゲーム開始
}
}
PlayerPrefs.SetIntで値を保存し、PlayerPrefs.GetIntでロードします。どちらも第一引数にキーとなる文字列を渡します。PlayerPrefs.GetIntでは、渡したキーが存在しないときに、第2引数の値が初期値として使われます。
ロードしたときに、ドロップダウンのValueにその値を入れてドロップダウンの選択を変えます。
それによってプレイモードを終了しても値は保存されたままで、再度プレイしたときにはドロップダウンの初期値がその値になっています。
ドロップダウンの項目を変更したときのメソッドでは、インデックスとそれに対応する縦横の長さを変数に入れます。このメソッドをOn Value Changedに追加します。
このとき、同じ名前のメソッドが2つ表示されますが、引数の無い方を選びます。ある方を選ぶと渡す値を入力する欄が出ます。
こうすると、どの項目を選んでも入力された値が引数に渡されます。無い方を選ぶとValueの値が渡されます。
そして、ゲームを開始する時に設定を適用します。このときに解像度では縦横の値を使います。
public void StartGame()
{
Screen.SetResolution(width, height, FullScreenMode.FullScreenWindow); // 解像度を適用
SceneManager.LoadScene("Game"); // ゲーム開始
}
これでドロップダウンの値の変更、保存、取得等の処理ができました。