【Unity】【C#】Quality (グラフィック品質) を文字列で取得/設定する 
2020/11/16 Mon [edit]
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);
}
Low
Medium
High
Very High
Ultra
出てくる名前は Quality Settings の内容にもよる。独自のレベルも追加できるので、プロジェクトごとになると考えて良い。
●現在の Quality を文字列で取得する
using UnityEngine;
var quality = QualitySettings.names[QualitySettings.GetQualityLevel()];
Debug.Log(quality);
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}");
}
品質の一覧は 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#】画面解像度とアクペクト比(整数)を求める
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/387-006acaa3
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |