Screen.SetResolutionに適当な解像度を渡すと想定しないアスペクト比になってしまうことがある

Unity - Scripting API: Screen.SetResolution

16:9と16:10だけサポートしておけば良いだろう。という考えで、
1920x1080、1920x1200、...のような解像度のリストを準備し、
その中からユーザーに解像度を選択してもらうUIを準備していたところ、
意図せずウルトラワイドディスプレイで起動した時に21:9のアスペクト比で起動してしまう事件が発生しました。

なんで?

確かにドキュメントを読むと

A width by height resolution is used. If no matching resolution is supported, the closest one is used.

「サポートされていない解像度を渡してしまった場合、最も近い解像度が勝手に使用される。」と書いてあり、
その際にアスペクト比は保証されないようです。

具体例

ウルトラワイドディスプレイ(3440x1440)を使用している時、
Screen.SetResolutionで3840x2160(16:9)を指定すると
最も近い解像度として3440x1440(21:9)が使用されていました。

解決策

ちゃんとScreen-resolutionsを取得した上で、
サポートしたいアスペクト比のものだけ抜き出したリストを作りましょう。