【Unity】画面解像度に依存しないGUI.LabelやGUI.Buttonの表示

2020/03/13DEVELOP, Unity

AndroidやiOSの実機に転送すると、GUIボタンやラベルの表示サイズが変わってしまう場合は、「GUIUtility.ScaleAroundPivot」を使うことでGUI内の解像度を設定出来ます。

Vector2 guiScreenSize = new Vector2(1280, 720);	// 基準とする解像度
void OnGUI()
{
	// GUI用の解像度設定
	GUIUtility.ScaleAroundPivot(new Vector2(Screen.width / guiScreenSize.x, Screen.height / guiScreenSize.y), Vector2.zero);
	// ボタン
	if (GUI.Button(new Rect(50, 50, 300, 300), "BUTTON"))
	{
	}
	// GUIの解像度を元に戻す
	GUI.matrix = Matrix4x4.identity; 
}

guiScreenSize想定でGUIが表示される様になります。ただ、このサンプルコードでは画面比率が異なると縦か横に伸びてしまいます。その場合は縦か横どちらかの拡縮の比率をそれぞれに適用させると良いと思います。

2020/03/13 改善版

縦横の幅をチェックしたうえで伸ばす 比率を決めれば変な伸び方をすることはありません。

void OnGUI()
{
    // GUI用の解像度設定
    float scale = (Screen.width > Screen.height) ? Screen.width  / 720f : Screen.height / 720f;
    GUIUtility.ScaleAroundPivot(new Vector2(scale, scale), Vector2.zero);
 
    // ボタン
    if (GUI.Button(new Rect(50, 50, 300, 300), "BUTTON"))
    {
    }
 
    // GUIの解像度を元に戻す
    GUI.matrix = Matrix4x4.identity; 
}

Posted by kazupon