UnityUIが画面解像度に自動的に適合


Unityでモバイルプラットフォームを開発するゲームでは、画面解像度の問題が避けられない.
解像度によって通常のUIがめちゃくちゃになります
UnityでplaneをバックグラウンドUIとして持つことができるのは、カメラに最も近い位置でカメラに描かれていると考えられることを知っています.
したがって、解像度の違いにより、UIの位置とサイズにエラーが発生します.
 
位置と大きさの問題を解決することができますが、もたらす問題もたくさんあり、維持しにくいです.
画面のサイズに合わせてUIをスケールする必要があります
もともとボタンがあった場合、現在の480 x 854の解像度で問題なく、600 x 1024または他の解像度に変更すると、位置も大きさも正しくないことがわかります
 
function OnGUI ()
{
     if (GUI.Button(Rect(Screen.width - 200, Screen.height - 100, 64, 64), "Start"))
     {
       // dosomething
     }
}

 
UIの移動とスケーリング
 
// original screen size
var m_fScreenWidth  : float = 480;
var m_fScreenHeight : float = 854;

// scale factor
var m_fScaleWidth  : float;
var m_fScaleHeight : float;

function Awake ()
{
     m_fScaleWidth = parseFloat(Screen.width)/m_fScreenWidth;
     m_fScaleHeight = parseFloat(Screen.height)/m_fScreenHeight;      
}

function OnGUI ()
{
     if (GUI.Button(Rect(Screen.width - 200 * m_fScaleWidth , Screen.height - 100 * m_fScaleHeight , 64 * m_fScaleWidth , 64 * m_fScaleHeight ), "Start"))
     {
       // dosomething
     }
}

 
UIコントロールが多い場合は、それぞれのサイズを制御する必要はありません.
マトリクスを使用して実装
 
GUI.matrix = Matrix4x4.TRS (Vector3(0, 0, 0), Quaternion.identity, Vector3 (m_fScaleWidth, m_fScaleHeight, 1)); 

 
これでbuttonの位置と大きさをスケールして簡単に