原地址:http://blog.csdn.net/lzhq1982/article/details/18814023

这篇文章是转载的,之前用UIStretch做屏幕自适应,但一直有两个硬伤让我难受,一是屏幕被随意拉伸后,里面的UI就不是我想要的比例了,明明一个圆形变成椭圆了,一个高挑的美女变成一个肥姐了,好吧,这如果还能忍,那第二条真是让我尝尽了各种方法,那就是panel的裁剪用不了了,想做Scroll View做不了了,然后百度才知道要Panel做裁剪必须要求其scale和其父一直到根节点的scale都是(1,1,1),这还咋拉伸啊,然后看到很多朋友的各种代码尝试,结果一一失败了,反正是不好使,所以用UIStretch做屏幕自适应真是蛋疼啊,下了个新的NGUI版本3.0.8,UIStretch已经不能用了,看来连官方都不太支持了,好在还有其他办法,看了一位朋友的博客,写的非常清楚了,我这里做一下转发,真是帮我解决了所有问题:

看过一些文章,大多数都用UIStretch。说实话我并不喜欢用这个脚本。

我一直对那些在屏幕适应上出现问题的人推荐使用UIRoot的ManualHeight。

先提供三个截图。看看效果是否是你想要的。旁边空白出来的地方,你需要和策划、美术商量用一些背景挡住。

1、正常开发分辨率下:

2、看起来较细的分辨率:

3、看起来较宽的分辨率:

使用注意:

1、和策划制定好开发时分辨率。这很重要,要保证所有UI都在同样的分辨率下制作。

2、把我这个脚本挂在UIRoot上。UIRoot的Scaling Style修改为FixedSize。

3、aspectRatioHeight、aspectRatioWidth分别为开发时的高和宽。

4、每个UIRoot都需要调整ManualHeight到和策划制定的高度。

5、Unity3D的Game窗口,调整到相应的分辨率。

(感谢成都-大强提供以下版本。注意:UICamera.onScreenResize是3.0+版本的,如果报错请删除即可

  1. using UnityEngine;
  2. [ExecuteInEditMode]
  3. [RequireComponent(typeof(UIRoot))]
  4. public class SZUIRootScale : MonoBehaviour
  5. {
  6. public int aspectRatioHeight;
  7. public int aspectRatioWidth;
  8. public bool runOnlyOnce = false;
  9. private UIRoot mRoot;
  10. private bool mStarted = false;
  11. void Awake()
  12. {
  13. UICamera.onScreenResize += ScreenSizeChanged;
  14. }
  15. void OnDestroy()
  16. {
  17. UICamera.onScreenResize -= ScreenSizeChanged;
  18. }
  19. void Start()
  20. {
  21. mRoot = NGUITools.FindInParents<UIRoot>(this.gameObject);
  22. mRoot.scalingStyle = UIRoot.Scaling.FixedSize;
  23. this.Update();
  24. mStarted = true;
  25. }
  26. void ScreenSizeChanged()
  27. {
  28. if (mStarted && runOnlyOnce) {
  29. this.Update();
  30. }
  31. }
  32. void Update()
  33. {
  34. float defaultAspectRatio = aspectRatioWidth * 1f / aspectRatioHeight;
  35. float currentAspectRatio = Screen.width * 1f / Screen.height;
  36. if (defaultAspectRatio > currentAspectRatio) {
  37. int horizontalManualHeight = Mathf.FloorToInt(aspectRatioWidth / currentAspectRatio);
  38. mRoot.manualHeight = horizontalManualHeight;
  39. } else {
  40. mRoot.manualHeight = aspectRatioHeight;
  41. }
  42. if (runOnlyOnce && Application.isPlaying) {
  43. this.enabled = false;
  44. }
  45. }
  46. }

【NGUI】屏幕自适应(不用UIStretch,用UIRoot)---------------good的更多相关文章

  1. 【Unity3D插件】NGUI屏幕自适应(转)

    屏幕自适应 NGUI可以比较方便的实现屏幕自适应,但是它的官方教程里面针对这个问题没有详细的教程,所以可能在实现的时候会走比较多的弯路.以下是我在开发过程中找到的一个比较方便的实现方法. 主要组件 1 ...

  2. NGUI屏幕自适应

    NGUI确实是非常棒的一个做界面的插件,比起U3D自带的GUI要好很多,当然也有一些不好之处,毕竟什么都不可能那么完美. 最近在用Unity写游戏使用NGUI遇到了一个很多人都在遇到的问题,就是关于屏 ...

  3. NGUI 屏幕自适应

    雨松MOMO 2014年05月04日 于 雨松MOMO程序研究院 发表  现在用unity做项目 90%都是用NGUI,并且我个人觉得NGUI应该算是比较成熟的UI插件,虽然他也存在很多问题,但是至少 ...

  4. NGUI屏幕自适应(转)

      屏幕自适应 NGUI可以比较方便的实现屏幕自适应,但是它的官方教程里面针对这个问题没有详细的教程,所以可能在实现的时候会走比较多的弯路.以下是我在开发过程中找到的一个比较方便的实现方法. 主要组件 ...

  5. NGUI 屏幕自适应大屏与小屏(初始设定宽高为1280x720,能适应比其小或者更大的屏)

    具体细节可以参考另外一篇随笔! 以下提供的算法完成的事: 1.自适应1280x720分辨率以下的屏幕 2.自适应1280x720分辨率以上的屏幕 在我设定的要求内包括的分辨率大部分都测过了,背景图.全 ...

  6. NGUI屏幕自适应解决方案

    NGUI研究院之自适应屏幕 http://www.xuanyusong.com/archives/2536 Unity3D研究院之使用Android的硬件缩放技术优化执行效率 http://www.x ...

  7. NGUI 屏幕自适应(初始设定宽高800x480只支持比其大的屏幕)

    自适应讲解部分可以参考以下网址:http://www.xuanyusong.com/archives/2536,下面代码中提到的AdaptiveManualHeight()函数就是参考该文章的. 下面 ...

  8. [Unity3D]NGUI用Sprite动画和屏幕自适应做游戏开始场景

    我们在玩任何一款手游产品时,都是先上来个logo界面,游戏欢迎界面等,这就意味着我们要做一款游戏需要多个场景,场景之间来回切换实现游戏逻辑,unity也不例外,所以从本篇开始将会介绍如何搭建多个场景, ...

  9. NGUI之自适应屏幕

     转载: 雨松MOMO 2014年05月04日 于 雨松MOMO程序研究院 发表 ,原文链接   现在用unity做项目 90%都是用NGUI,并且我个人觉得NGUI应该算是比较成熟的UI插件,虽然他 ...

随机推荐

  1. Sql server 查询

    --Student(S#,Sname,Sage,Ssex) 学生表 --Course(C#,Cname,T#) 课程表 --SC(S#,C#,score) 成绩表 --Teacher(T#,Tname ...

  2. css3学习笔记之用户界面

    CSS3 调整尺寸(Resizing) CSS3中,resize属性指定一个元素是否应该由用户去调整大小. 这个 div 元素由用户调整大小. (在 Firefox 4+, Chrome, 和 Saf ...

  3. 利用cglib生成动态java bean

    cglib详细学习 http://blog.csdn.net/u010150082/article/details/10901641 cglib-nodep jar报下载 http://grepcod ...

  4. Excel数据复制到Winform控件ListView

    先给窗体添加一个右键菜单contextMenuStrip 加一个下拉项[粘贴] 粘贴事件: private void tsmiPaste_Click(object sender, EventArgs ...

  5. VS2010水晶报表的添加与使用

    最近在学习VS2010水晶报表,发现原先安装的VS2010旗舰版没有 Crystal Report Viewer 控件,网上搜索一下发现要安装一个插件----CRforVS_13_0, 于是下载安装: ...

  6. tomcat源码解读(2)–容器责任链模式的实现

    责任链模式:责任链模式可以用在这样的场景,当一个request过来的时候,需要对这个request做一系列的加工,使用责任链模式可以使每个加工组件化,减少耦合.也可以使用在当一个request过来的时 ...

  7. 超棒的阿里巴巴矢量图标库——支持IE6

    Iconfont.cn 是由阿里巴巴UX部门推出的矢量图标管理网站,也是国内首家推广Webfont形式图标的平台.网站涵盖了1000多个常用图标并还在持续更新 中,Iconfont平台为用户提供在线图 ...

  8. 字符设备驱动中cdev与inode、file_operations的关系

    一.cdev与inode 二.cdev与file_operations

  9. jsp分页代码之pageUtil类

    pageUtil类负责得到每页的开始数和结束数 package control; public class PageUtil { private int pageSize;//每页显示的条数 priv ...

  10. HDFS知识体系 思维导图