UnityでSRDebuggerを使っていると、「他の人より文字が小さい」「Editorとスマホでサイズが違う」というクレームが付くことがあって、なんでかなーと思ったら、いくつかある原因の合わせ技でした。
- SRDebuggerのCanvas Scalerが"Constant Pixel Size"になっている。
- 単純に解像度が高いほうが文字が小さくなる作り。
- EditorのGameViewを"Fixed Resolution"で設定するか"Aspect Ratio"で設定するかで、同じように見えても解像度が違う。
- "Aspect Ratio"だとGameViewで実際に表示しているサイズが解像度になる。
- SRDebuggerはdpiによってCanvasの拡大率を変えるようになっているが、WindowsやmacOSは画面サイズに関わらずdpi固定なので意味がない。
- 高解像度スマホで必要以上に小さくならないのは画面サイズに合ったdpiが設定されているため。
では、どう対応しようかというところで、"Window->SRDebugger->Setting Window"で"UI Scale"を変更するとすべての環境で大きくなってしまうし、SRDebuggerに解像度に関するAPIはないし、あまりやりたくはないのだけどスクリプトをいじるしかないのかなと。
Assets/StompyRobot/SRF/Scripts/UI/SRRetinaScaler.cs
- float scale = dpi / _designDpi;
+ #if UNITY_EDITOR
+ dpi *= 2.0f * (Screen.width / 1920.0f);
+ #endif
+ float scale = dpi / _designDpi;
問題なのは概ねEditorでの文字の小ささなので、1920x1080を基準としてdpiを2倍にしてみました(横の解像度が大きいほどdpiが大きくなる=文字が大きくなる)。2倍という数字に特に意味はないのでお好みで。個人的にはこのくらいが27インチWQHDでちょうどよかったです。
なお、UnityのAPI的には
- Screen.currentResolution -> ディスプレイの解像度
- Screen.width Screen.height -> ゲーム画面の解像度(※スマホでは上記と同じ)
- Screen.dpi -> ドット密度(dpi)
となります。