0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unity の IMGUI を High DPI 対応

Posted at

Unity の IMGUI は GUI.matrix にスケール行列を掛けることでサイズを変えられる。
GUIUtility.ScaleAroundPivot はその計算を行ってくれるヘルパークラスなので、それを利用する。

Windows の DPI は標準で 96 dpi なので、それと Screen.dpi との比でスケールさせる。
Unity Editor には Low Resolution Aspect Ratio という DPI を下げる機能(チェックボックス)があるが、Screen.dpi はそれに対応していないので、GameView.lowResolutionForAspectRatios の getter プロパティーをチェックすることで対応する。

GameView クラスを取得するには、EditorWindow.GetWindowUnityEditor Assembly 内の UnityEditor.GameView 型を渡すことになる。GameView 型は参照できないので、PropertyInfo によるリフレクションによって lowResolutionForAspectRatios にアクセスする。

最終的には、下記のようなスクリプトになる。

ImguiHighdpiScaler.cs
var scale = Screen.dpi / 96f;
#if UNITY_EDITOR
var typeGameView = System.Type.GetType("UnityEditor.GameView,UnityEditor");
var gameView = EditorWindow.GetWindow(typeGameView);
var propLowRes = typeGameView.GetProperty("lowResolutionForAspectRatios");
var isLowRes = (bool)propLowRes.GetValue(gameView);
if (isLowRes)
	scale *= 0.5f;
#endif
GUIUtility.ScaleAroundPivot(new Vector2(scale, scale), Vector2.zero);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?