Unity

【Unity】まずは解像度変更をいじってみる

Unity

色々と検索してみて、ボタン式とドロップダウン式があることが分かりました。
ボタン式は簡単でした。でも、それだとボタンを置いておくスペースが邪魔なので。コンフィグの中よりも外の方がいいかと思ったが、やっぱりコンフィグの中に置いておこう。

というわけでドロップダウンの方をと思って、色々やってましたがエラー起こしたりと最終的にこっちになりました。
https://www.ame-name.com/archives/2606

でも、なかなか勝手がうまくいってくれないから、ChatGPTで聞いてみました。
どうもね、ドロップダウンは表示されるけど解像度が変わらない。多分、他のコードの影響とかで機能しないのかな…。探しても公開されてるのがなくて。

こんなコードが生まれた。

using UnityEngine;
using UnityEngine.UI;

public class ResolutionController : MonoBehaviour
{
    public Dropdown resolutionDropdown;

    private int[] resolutionsX = { 1280, 1920, 2560 };
    private int[] resolutionsY = { 720, 1080, 1440 };

    public void OnResolutionChanged(int resolutionIndex)
    {
        if (resolutionIndex >= 0 && resolutionIndex < resolutionsX.Length)
        {
            int width = resolutionsX[resolutionIndex];
            int height = resolutionsY[resolutionIndex];
            Screen.SetResolution(width, height, Screen.fullScreen);
        }
    }
}

導入の説明で書き変わったコード。

using UnityEngine;
using UnityEngine.UI;

public class ResolutionController : MonoBehaviour
{
    public Dropdown resolutionDropdown;

    private int[] resolutionsX = { 1280, 1920, 2560 };
    private int[] resolutionsY = { 720, 1080, 1440 };

    private void Start()
    {
        // Dropdownの初期値を現在の解像度に設定
        int currentResolutionIndex = GetCurrentResolutionIndex();
        resolutionDropdown.value = currentResolutionIndex;
        resolutionDropdown.RefreshShownValue();
    }

    private int GetCurrentResolutionIndex()
    {
        // 現在の解像度を取得して、resolutionsXおよびresolutionsYと比較して一致するインデックスを返す
        int currentWidth = Screen.currentResolution.width;
        int currentHeight = Screen.currentResolution.height;

        for (int i = 0; i < resolutionsX.Length; i++)
        {
            if (currentWidth == resolutionsX[i] && currentHeight == resolutionsY[i])
            {
                return i;
            }
        }

        // 一致する解像度が見つからない場合は、デフォルトとして0番目の解像度を返す
        return 0;
    }

    public void OnResolutionChanged(int resolutionIndex)
    {
        if (resolutionIndex >= 0 && resolutionIndex < resolutionsX.Length)
        {
            int width = resolutionsX[resolutionIndex];
            int height = resolutionsY[resolutionIndex];
            Screen.SetResolution(width, height, Screen.fullScreen);
        }
    }
}

C#とか全然分からんし、なるほどなぁと勉強になりました。

public class ResolutionController でイベント指定、

public void OnResolutionChanged(変数指定なし) でメソッド指定と。

さすがにアタッチやら何やら、ちょっとずつ分かってきたので、EventSystem内にResolution Controllerにスクリプトを追加すればいいんだなと、少しずつですが自分の挙動自体は分かりやすくなってきました。
こうすることで解像度が変更になりました。

正直、調べ方が分からん時とか頼ってみるとすごく頼れる味方かもしれないのがAI。
プログラム系なら頼ってもいい気がする。でも、依存するほどではないかな。依存するべきではないが。楽をするならやるべきことで、人間の使い方で人間がダメになるのがAI。

※いじってて分かったけど、Unity宴の関係で、コンフィグの中にドロップダウンを入れようとしてもキャンバスのカメラ設定が異なっているから厳しそう。
素直にボタン式にするかな…。今の自分じゃ難易度が高すぎて頭痛い。エロゲー見ててもドロップダウンとかあんまり見かけず、スペース埋める的にもボタン式の方が見栄えはいいのかも。

一応、あえてデフォルト画面サイズは1280×720で、画面サイズ変更が利くように3パターンの予定です。

解像度が低い人とかでいきなり1920×1080はきつそうだし。自分のはセーブタイプじゃないから即時起動して見たいところ終わったら閉じてもいいっていう仕様。
セーブタイプって、地味に面倒じゃないですか。フラグを通過しないと閲覧が増えないとか。

あと、前に同人作品で紹介した「生意気アンドロイド」もUnity製ですけど、どうやらUnityの仕様変更で解像度の指定は今はなくなってるようです。あのダイアログどうやって出るんだと思ったけど、項目自体がもう残ってない。

コメント