FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】Quality (グラフィック品質) を文字列で取得/設定する

【Unity】【C#】Quality (グラフィック品質) を文字列で取得/設定する  


 Unity2019.3 から起動時の画面解像度・品質設定のダイアログが無くなってしまったので、自前実装が必要になったので、テスト中。

 エディタでは Quality の設定の選択に相当する。

 やってみたけど、ランタイム時に動的に Quality できるのって結構良いね。ゲームではあまり必要ないのかもだが、ツールでは品質落とす代わりに実行速度上げる or 実装速度より品質を優先する、なんてことがユーザー自身で選べるのは意外と良い。


(※) Unity 2019.4.14f1 / Windows10(x64) で確認



 グラフィック品質関連は QualitySettings ある。以下は簡単なテストと結果だけなので、実際の利用にはドロップダウンで選択して適用するとか、何らかのアクションを挟む必要があるだろう。



●Quality の一覧を出力する
using UnityEngine;

var names = QualitySettings.names;
foreach (var quality in names)
{
Debug.Log(quality);
}

Very Low
Low
Medium
High
Very High
Ultra

 出てくる名前は Quality Settings の内容にもよる。独自のレベルも追加できるので、プロジェクトごとになると考えて良い。


●現在の Quality を文字列で取得する
using UnityEngine;

var quality = QualitySettings.names[QualitySettings.GetQualityLevel()];
Debug.Log(quality);

Ultra

 QualitySettings.GetQualityLevel() では、現在のインデクスが返って来るので、一覧(QualitySettings.names)から名前を引けば、現在の品質を文字列で取得できる。この辺りは定形処理となるので、static なメソッド or プロパティを1つ作っておくと便利かも知れない。


●Quality の名前(文字列) で品質を動的に更新(適用)する
using UnityEngine;

var quality = "Medium"; //※変更する品質
int idx = Array.IndexOf(QualitySettings.names, quality);
if (idx >= 0)
{
QualitySettings.SetQualityLevel(idx, true);
Debug.Log($"Changed Quality : {quality}");
}
else
{
Debug.Log($"Not Found Quality : {quality}");
}

Changed Quality : Medium

 品質の一覧は QualitySettings.names で、現在の品質をインデクス:QualitySettings.GetQualityLevel() で設定されているので、文字列で検索(完全一致)して更新すれば良い。

 QualitySettings.SetQualityLevel() の第2引数の applyExpensiveChanges: true はマニュアルで「Should expensive changes be applied (Anti-aliasing etc)」(アンチエイリアス処理など処理時間がかる処理を適用する) となっているが、「画面全体を新しい品質で描き直すか?」と考えて良い。すぐに適用したいなら、デフォルトの true のままで良いだろう。

 これも static なメソッドを作っておくと便利な気がする。



 Uniy2019.3 で無くなってしまった解像度・品質設定ダイアログの代替手段としては、オープンソースの UnityResolutionDialog を参考にするのが良いかも知れない。ただ、リフレッシュレートや VSync などの設定はデフォルトのままの方が良い気がするので(モニタと合わない場合、画面がおかしくなってしまうため)、その辺りを除外して利用するのが良いだろう。フォーラム見てると、Unityの中の人から「問題を起こしやすいため、削除した」みたいなコメントがあったりするが、これからは毎度、この辺りの実装をアプリに入れないといけないのは(少なくとも、フルスクリーン ←→ ウィンドウモードくらいは欲しい)、正直面倒くさいね…(笑)。







(関連記事)
【Unity】【C#】画面解像度とアクペクト比(整数)を求める


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityリファレンス 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/387-006acaa3
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop