Unity3d 使GUI適應螢幕解析度

2022-09-15 09:42:10 字數 1831 閱讀 2941

【unity3d】使gui適應螢幕解析度

用unity開發移動平台的遊戲  不可避免的會遇到螢幕解析度的問題  

不同的解析度上會使得原本正常的ui變得亂七八糟  

我們知道  在unity中可以拿乙個plane作為背景 ui則是繪製在離攝像機最近的位置  可以認為是繪製在攝像機上的

因此解析度的不同會導致ui的位置和大小出現錯誤

我們完全可以用乙個plane去模擬button  並將它放在世界空間中  這樣雖然可以解決位置和大小的問題  但是所帶來的問題也一大堆並難於維護

因此我們需要根據螢幕的大小去按比例縮放ui

假如原本有個按鈕是這樣,並且當前的480x854解析度下沒問題,如果改成600x1024或者其他的解析度,便會發現位置和大小都不正確了

function ongui ()

}

於是我們按比例去移動和縮放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 ()

function ongui ()

}

若ui控制項較多的時候,對每乙個都去控制大小顯然沒必要

則使用矩陣實現

gui.matrix = matrix4x4.trs (vector3(0, 0, 0), quaternion.identity, vector3 (m_fscalewidth, m_fscaleheight, 1));
這樣就將button的位置和大小都按照比例縮放了  很簡單

用unity開發移動平台的遊戲  不可避免的會遇到螢幕解析度的問題  

不同的解析度上會使得原本正常的ui變得亂七八糟  

我們知道  在unity中可以拿乙個plane作為背景 ui則是繪製在離攝像機最近的位置  可以認為是繪製在攝像機上的

因此解析度的不同會導致ui的位置和大小出現錯誤

我們完全可以用乙個plane去模擬button  並將它放在世界空間中  這樣雖然可以解決位置和大小的問題  但是所帶來的問題也一大堆並難於維護

因此我們需要根據螢幕的大小去按比例縮放ui

假如原本有個按鈕是這樣,並且當前的480x854解析度下沒問題,如果改成600x1024或者其他的解析度,便會發現位置和大小都不正確了

function ongui ()

}

於是我們按比例去移動和縮放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 ()

function ongui ()

}

若ui控制項較多的時候,對每乙個都去控制大小顯然沒必要

則使用矩陣實現

gui.matrix = matrix4x4.trs (vector3(0, 0, 0), quaternion.identity, vector3 (m_fscalewidth, m_fscaleheight, 1));
這樣就將button的位置和大小都按照比例縮放了  很簡單

Unity3D 螢幕自適應

其實說起來是老問題了,ngui時代,那時候的自適應大部分是交給ngui去處理,但是後來unity3d自家的ugui橫空出世之後,大部分人還是選擇了ugui,剛開始ugui的自適應並不好處理,但是現在已經變成了很容易的問題。在我紅筆標出來的地方就是影響自適應的關鍵地方,我現在的選擇是,1920 108...

Unity3D外掛程式 NGUI螢幕自適應

ngui可以比較方便的實現螢幕自適應,但是它的官方教程裡面針對這個問題沒有詳細的教程,所以可能在實現的時候會走比較多的彎路。以下是我在開發過程中找到的乙個比較方便的實現方法。1.uianchor 這個是用來確定控制項在螢幕中的位置,另外有一篇教程專門講它的功能,所有不會再贅述 2.uistretch...

unity3D之GUI之TextField控制項用法

textfield控制項主要用於監聽使用者的輸入資訊,獲取的資料資訊都會轉換成字串型別,在此需要注意的是,當輸入的是數字或者其他型別需要轉換時,應考慮異常等情況的發生。pragma strict private var editusername string private var editpass...