unity3d UI自动适合屏幕分辨率

用unity3d开发移动平台的游戏  不可避免的会遇到屏幕分辨率的问题   

不同的分辨率上会使得原本正常的UI变得乱七八糟   

我们知道  在unity3d中可以拿一个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的位置和大小都按照比例缩放了  很简单

转载于:https://www.cnblogs.com/fm168/archive/2013/06/07/3123176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值