fc2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】画面解像度とアクペクト比(整数)を求める

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


 前回までのユークリッド互除法の実装は画面解像度とアスペクト比を一気に調べたいがために、Java から移植したものだったりする(笑)。

 せっかくなので「分数の約分」する関数を使って、画面解像度の一覧からアクペクト比を計算させてみよう。

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

●画面解像度とアクペクト比の一覧を出力してみる
using UnityEngine;

var resolutions = Screen.resolutions;
foreach (var res in resolutions)
{
Debug.Log($"{res} {Reduce(res.width, res.height)}, w/h = {(float)res.width/res.height}"); //※Reduce は以前の記事を参照
}

800 x 600 @ 60Hz (4, 3), w/h = 1.333333
800 x 600 @ 75Hz (4, 3), w/h = 1.333333
1024 x 768 @ 50Hz (4, 3), w/h = 1.333333
1024 x 768 @ 59Hz (4, 3), w/h = 1.333333
1024 x 768 @ 60Hz (4, 3), w/h = 1.333333
1024 x 768 @ 75Hz (4, 3), w/h = 1.333333
1152 x 864 @ 50Hz (4, 3), w/h = 1.333333
1152 x 864 @ 59Hz (4, 3), w/h = 1.333333
1152 x 864 @ 60Hz (4, 3), w/h = 1.333333
1152 x 864 @ 75Hz (4, 3), w/h = 1.333333
1280 x 600 @ 50Hz (32, 15), w/h = 2.133333
1280 x 600 @ 59Hz (32, 15), w/h = 2.133333
1280 x 600 @ 60Hz (32, 15), w/h = 2.133333
1280 x 720 @ 50Hz (16, 9), w/h = 1.777778
1280 x 720 @ 59Hz (16, 9), w/h = 1.777778
1280 x 720 @ 60Hz (16, 9), w/h = 1.777778
1280 x 768 @ 50Hz (5, 3), w/h = 1.666667
1280 x 768 @ 59Hz (5, 3), w/h = 1.666667
1280 x 768 @ 60Hz (5, 3), w/h = 1.666667
1280 x 800 @ 50Hz (8, 5), w/h = 1.6
1280 x 800 @ 59Hz (8, 5), w/h = 1.6
1280 x 800 @ 60Hz (8, 5), w/h = 1.6
1280 x 960 @ 50Hz (4, 3), w/h = 1.333333
1280 x 960 @ 59Hz (4, 3), w/h = 1.333333
1280 x 960 @ 60Hz (4, 3), w/h = 1.333333
1280 x 1024 @ 50Hz (5, 4), w/h = 1.25
1280 x 1024 @ 59Hz (5, 4), w/h = 1.25
1280 x 1024 @ 60Hz (5, 4), w/h = 1.25
1280 x 1024 @ 75Hz (5, 4), w/h = 1.25
1360 x 768 @ 50Hz (85, 48), w/h = 1.770833
1360 x 768 @ 59Hz (85, 48), w/h = 1.770833
1360 x 768 @ 60Hz (85, 48), w/h = 1.770833
1366 x 768 @ 50Hz (683, 384), w/h = 1.778646
1366 x 768 @ 59Hz (683, 384), w/h = 1.778646
1366 x 768 @ 60Hz (683, 384), w/h = 1.778646
1400 x 1050 @ 50Hz (4, 3), w/h = 1.333333
1400 x 1050 @ 59Hz (4, 3), w/h = 1.333333
1400 x 1050 @ 60Hz (4, 3), w/h = 1.333333
1440 x 900 @ 50Hz (8, 5), w/h = 1.6
1440 x 900 @ 59Hz (8, 5), w/h = 1.6
1440 x 900 @ 60Hz (8, 5), w/h = 1.6
1600 x 900 @ 50Hz (16, 9), w/h = 1.777778
1600 x 900 @ 59Hz (16, 9), w/h = 1.777778
1600 x 900 @ 60Hz (16, 9), w/h = 1.777778
1680 x 1050 @ 50Hz (8, 5), w/h = 1.6
1680 x 1050 @ 59Hz (8, 5), w/h = 1.6
1680 x 1050 @ 60Hz (8, 5), w/h = 1.6
1920 x 1080 @ 50Hz (16, 9), w/h = 1.777778
1920 x 1080 @ 59Hz (16, 9), w/h = 1.777778
1920 x 1080 @ 60Hz (16, 9), w/h = 1.777778

 Reduce() は以前の記事のコードをコピペして欲しい。

 出てくる解像度はエディタとランタイムで違うので注意。また、設定にも依る(ProjectSetting>Player>Resolution and Presentation>Supported Aspect Ratios)もちろんハードウェア(モニタ)にも依る

 あと、ここでは約分をしてるだけなので、例えば 16:10 → 8:5 になるので注意。

 また、ほぼ 16:9 の 1360x768 (85:48), 1366x768 (683:384) みたいなものも Supported Aspect Ratios で 16:9 に含まれるようだ。この辺りは、width/height = 1.77 で判別した方が簡単だ。

 ちなみに、私の環境では、Supported Aspect Ratios を 16:9 だけに設定したら、以下のようになった。

1280 x 720 @ 50Hz (16, 9), w/h = 1.777778
1280 x 720 @ 59Hz (16, 9), w/h = 1.777778
1280 x 720 @ 60Hz (16, 9), w/h = 1.777778
1360 x 768 @ 50Hz (85, 48), w/h = 1.770833
1360 x 768 @ 59Hz (85, 48), w/h = 1.770833
1360 x 768 @ 60Hz (85, 48), w/h = 1.770833
1366 x 768 @ 50Hz (683, 384), w/h = 1.778646
1366 x 768 @ 59Hz (683, 384), w/h = 1.778646
1366 x 768 @ 60Hz (683, 384), w/h = 1.778646
1600 x 900 @ 50Hz (16, 9), w/h = 1.777778
1600 x 900 @ 59Hz (16, 9), w/h = 1.777778
1600 x 900 @ 60Hz (16, 9), w/h = 1.777778
1920 x 1080 @ 50Hz (16, 9), w/h = 1.777778
1920 x 1080 @ 59Hz (16, 9), w/h = 1.777778
1920 x 1080 @ 60Hz (16, 9), w/h = 1.777778



 アス比を改めて調べる必要性が出てきたのは、Unity2019.3 から起動時の画面解像度を入力設定のダイアログが無くなってしまったため。

What's the resolution dialog replacement?

 フォーラム見てると、Unityの中の人から「問題を起こしやすいため、削除した」みたいなコメントがあったりするが、まぁ、ゲームなら確かに固定解像度でも良いのかもね。しかし、最近では色々な3Dツールとしての使われ方も多くなった。

 実際、私も VRM Live Viewer では録画(キャプチャ)するときは解像度を低く、ただ観て楽しむだけのときは解像度を高く、なんて使い分けもしてた。特に Twitter など SNS ではスペック制限あったりするので、あまり高解像度で撮っても意味がない。なので、自分で解像度変更を実装する必要性が出てきてしまった。

 最終的には、オープンソースの UnityResolutionDialog を参考に実装しようと思っているが、設定によってどの解像度が範囲に含まれるか知っておきたいと考えた。そういう意味でも一目でアス比を見れるようにするは便利だ(どちらかというとデバッグ用だが、可変解像度なら整数比の方がユーザーにとって理解しやすい利点もある。実装自体は width/height した float 値でも十分)。

 ゲームパッドは InputSystem で対応するのが簡単かもね。一応、ピンチ/スワイプ/長押し/ダブル・トリプルクリックなどの操作も InputSystem に対応させたので、いずれはこの辺りの移行も必要かも知れない。

 しかし最近、Unity のアップグレードが入るたびに、実装を変えないといけない仕様は何とかして欲しいものである(泣)。







(関連記事)
【Unity】【C#】Quality (グラフィック品質) を文字列で取得/設定する
【C#】最大公約数を求める/分数の約分をする(ユークリッドの互除法)
【C#】最小公倍数を求める(ユークリッドの互除法)
【Java】最大公約数・最小公倍数を求める(ユークリッドの互除法)
【Java】3つ以上の最大公約数を求める(ユークリッドの互除法②)
【Java】拡張ユークリッドの互除法


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



category: Unity

thread: ゲーム開発

janre: コンピュータ

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


トラックバック

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

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop