1. 程式人生 > >Unity3d gui自適應螢幕

Unity3d gui自適應螢幕

用Unity開發移動平臺的遊戲  不可避免的會遇到螢幕解析度的問題  不同的解析度上會使得原本正常的UI變得亂七八糟  我們知道  在Unity中可以拿一個plane作為背景 UI則是繪製在離攝像機最近的位置  可以認為是繪製在攝像機上的 因此解析度的不同會導致UI的位置和大小出現錯誤 我們完全可以用一個plane去模擬button  並將它放在世界空間中  這樣雖然可以解決位置和大小的問題  但是所帶來的問題也一大堆並難於維護 因此我們需要根據螢幕的大小去按比例縮放UI 假如原本有個按鈕是這樣,並且當前的480x854解析度下沒問題,如果改成600x1024或者其他的解析度,便會發現位置和大小都不正確了 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的位置和大小都按照比例縮放了  很簡單