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

欢迎来到unity学习unity培训unity企业培训教育专区,这里有很多U3D资源U3D培训视频U3D教程U3D常见问题U3D项目源码,【狗刨学习网】unity极致学院,致力于打造业内unity3d培训、学习第一品牌。

用Unity开发移动平台的游戏  不可避免的会遇到屏幕分辨率的问题  
不同的分辨率上会使得原本正常的UI变得乱七八糟  
我们知道  在Unity中可以拿一个plane作为背景 UI则是绘制在离摄像机最近的位置  可以认为是绘制在摄像机上的
因此分辨率的不同会导致UI的位置和大小出现错误

我们完全可以用一个plane去模拟button  并将它放在世界空间中  这样虽然可以解决位置和大小的问题  但是所带来的问题也一大堆并难于维护
因此我们需要根据屏幕的大小去按比例缩放UI
假如原本有个按钮是这样,并且当前的480x854分辨率下没问题,如果改成600x1024或者其他的分辨率,便会发现位置和大小都不正确了

  1. function OnGUI ()
  2. {
  3.      if (GUI.Button(Rect(Screen.width - 200, Screen.height - 100, 64, 64), "Start"))
  4.      {
  5.        // dosomething
  6.      }
  7. }
  8. 复制代码
复制代码

于是我们按比例去移动和缩放UI

  1. // original screen size
  2. var m_fScreenWidth  : float = 480;
  3. var m_fScreenHeight : float = 854;

  4. // scale factor
  5. var m_fScaleWidth  : float;
  6. var m_fScaleHeight : float;

  7. function Awake ()
  8. {
  9.      m_fScaleWidth = parseFloat(Screen.width)/m_fScreenWidth;
  10.      m_fScaleHeight = parseFloat(Screen.height)/m_fScreenHeight;      
  11. }

  12. function OnGUI ()
  13. {
  14.      if (GUI.Button(Rect(Screen.width - 200 * m_fScaleWidth , Screen.height - 100 * m_fScaleHeight , 64 * m_fScaleWidth , 64 * m_fScaleHeight ), "Start"))
  15.      {
  16.        // dosomething
  17.      }
  18. }
  19. 复制代码
复制代码

若UI控件较多的时候,对每一个都去控制大小显然没必要
则使用矩阵实现

  1. GUI.matrix = Matrix4x4.TRS (Vector3(0, 0, 0), Quaternion.identity, Vector3 (m_fScaleWidth, m_fScaleHeight, 1));
复制代码
这样就将button的位置和大小都按照比例缩放了  很简单

声明:此篇文档时来自于【狗刨学习网】社区,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。

更多精彩内容:www.gopedu.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。