【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的位置和大小都按照比例縮放了  很簡單


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM