Unity3D NGUI自适应屏幕分辨率(2014/4/17更新)
原地址:http://blog.csdn.net/asd237241291/article/details/8126619
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 本文链接地址:Unity3D NGUI自适应屏幕分辨率
1.UIRoot:根据高度自适应屏幕分辨率。
- PixelPerfect 完美像素:直接显示设定好的像素。当屏幕高度低于minimum Height时按比例缩小,当屏幕高度大于maximum Height时按比例扩大。
- FixedSize 按比例缩放:在设定好的基础上,直接按比例缩放。
- FixedSizeOnMobiles 合体版,android和ios为FixedSize方式,其它按照PixelPerfect方式。
// FixedSize时:填理想分辨率的高度
// FixedSizeofWidth时:填理想分辨率的宽度
Manual Height:先按照理想分辨率做。当Game视图(打包后的屏幕分辨率)不是这个理想分辨率的时候就会进行比例缩放。
Minimum Height:Game视图低于这个数值开始按比例缩放。
Maximum Height:Game视图高于这个数值开始按比例缩放。
这三种缩放方式全部都是按照高度计算缩放比例,完全忽略宽度。
2.UIRoot:根据宽度自适应屏幕分辨率。
1.首先给UIRoot增加一种状态
- public enum Scaling
- {
- PixelPerfect,
- FixedSize,
- FixedSizeOnMobiles,
- /// <summary>
- /// 根据宽度适配
- /// </summary>
- FixedSizeofWidth,
- }
2.实现还是需要FixedSize的算法,所以需要修改两个判断语句
修改1:
- public float GetPixelSizeAdjustment (int height)
- {
- height = Mathf.Max(2, height);
- //修改1
- if (scalingStyle == Scaling.FixedSize || scalingStyle == Scaling.FixedSizeofWidth)
- return (float)manualHeight / height;
- #if UNITY_IPHONE || UNITY_ANDROID
- if (scalingStyle == Scaling.FixedSizeOnMobiles)
- return (float)manualHeight / height;
- #endif
- if (height < minimumHeight) return (float)minimumHeight / height;
- if (height > maximumHeight) return (float)maximumHeight / height;
- return 1f;
- }
修改2:
- public int activeHeight
- :{
- get
- {
- int height = Mathf.Max(2, Screen.height);
- //修改2
- if (scalingStyle == Scaling.FixedSize || scalingStyle == Scaling.FixedSizeofWidth)
- return manualHeight;
- #if UNITY_IPHONE || UNITY_ANDROID
- if (scalingStyle == Scaling.FixedSizeOnMobiles)
- return manualHeight;
- #endif
- if (height < minimumHeight) return minimumHeight;
- if (height > maximumHeight) return maximumHeight;
- return height;
- }
- }
3.增加按宽度自适应算法
- void Update ()
- {
- #if UNITY_EDITOR
- if (!Application.isPlaying && gameObject.layer != 0)
- UnityEditor.EditorPrefs.SetInt("NGUI Layer", gameObject.layer);
- #endif
- if (mTrans != null)
- {
- float calcActiveHeight = activeHeight;
- if (calcActiveHeight > 0f )
- {
- float size = 2f / calcActiveHeight;
- //看这里,看这里,看这里
- if (scalingStyle == Scaling.FixedSizeofWidth)
- {
- float radio = (float)Screen.width / Screen.height;
- size = size * radio;
- }
- Vector3 ls = mTrans.localScale;
- if (!(Mathf.Abs(ls.x - size) <= float.Epsilon) ||
- !(Mathf.Abs(ls.y - size) <= float.Epsilon) ||
- !(Mathf.Abs(ls.z - size) <= float.Epsilon))
- {
- mTrans.localScale = new Vector3(size, size, size);
- }
- }
- }
- }
3.UIStretch:根据宽度自适应屏幕分辨率。(NGUI3.0.7版本后不再支持)
- public enum Style
- {
- None,
- Horizontal,
- Vertical,
- Both,
- BasedOnHeight,
- BasedOnWidth,
- FillKeepingRatio,
- FitInternalKeepingRatio
- }
- if (style == Style.BasedOnHeight)
- {
- localScale.x = relativeSize.x * rectHeight;
- localScale.y = relativeSize.y * rectHeight;
- }else if (style == Style.BasedOnWidth)
- {
- localScale.x = relativeSize.x * rectWidth;
- localScale.y = relativeSize.y * rectWidth;
- }
- else if (style == Style.FillKeepingRatio)
- {……}
Unity3D NGUI自适应屏幕分辨率(2014/4/17更新)的更多相关文章
- NGUI自适应屏幕分辨率
unity官方承诺的新ui系统一直没有推出来,我们的UI使用的是原生的OnGUI系统,刚好UI需要改版,索性就想迁到NGUI上面来,于是看了一下NGUI源码,发现NGUI可以大大的降低DrawCall ...
- #region 自适应屏幕分辨率
#region 自适应屏幕分辨率 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public ...
- delphi 窗体自适应屏幕分辨率
delphi 窗体自适应屏幕分辨率 这是个困惑我很长时间的问题,到今天终于得到解决了. 话说Delphi有个很强的窗体设计器,这一点让VC粉丝垂涎三尺而不可得.但是,Delphi里设计的窗体并没有自动 ...
- Unity NGUI根据高度自适应屏幕分辨率
Unity版本:4.5.1 NGUI版本:3.6.5 本文内容纯粹转载,转载保留参考链接和作者 参考链接:http://blog.csdn.net/asd237241291/article/detai ...
- Unity 利用NGUI做屏幕分辨率适配+学习UIDraggablePanel的使用
原地址:http://blog.sina.com.cn/s/blog_697b1b8c0101g2r4.html 大家使用unity,一定有看中其跨平台的强大功能,因此也难免会遇到不同屏幕分辨率适配的 ...
- Delphi:窗体自适应屏幕分辨率的改进
在窗体依据屏幕分辨率自适应调整尺度方面,昨天的工作可以说是一个突破点.昨天的工作找到了长期以来我的原有方案的问题所在,这是非常关键的.但是昨天晚上的解决方案并不完美,今天的这个才是比较完美的解决版. ...
- H5自适应屏幕分辨率大小
说明: ①:H5自适应不同分辨率的设备,其实主要就一句 <meta name="viewport" content="width=device-width,init ...
- Unity3D Android手机屏幕分辨率问题
Android手机屏幕分辨率五花八门,导致开发时不好把握,还好各个引擎对这个屏幕分辨率问题都有较好的处理方式:unity3D 也为我们提供了一个不错的解决方案. 在Unity3D 进行 android ...
- Delphi:窗体自适应屏幕分辨率(根据预设值的比例改变)
delphi 程序适应屏幕分辨率,先在表单单元的Interface部分定义两个常量, 表示设计时的屏幕的宽度和高度(以像素为单位). 在表单的Create事件中先判断 当前分辨率是否与设计分辨率相同, ...
随机推荐
- Touch ID指纹解锁使用
Touch ID是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术.大家用得最多的可能是手机的解屏操作,不用在和以前一样输入手机的四位数密码进行验证.一方面不用担心密码被别人看到,另 ...
- 关于《Swift开发指南》背后的那些事
时间轴(倒叙)2014年8月底在图灵出版社的大力支持下,全球第一本全面.系统.科学的,包含本人多年经验的呕心沥血之作<Swift开发指南>(配有同步视频课程和同步练习)全线重磅推出2014 ...
- OC7_目录操作
// // main.m // OC7_目录操作 // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zhangxuemi ...
- 为什么要使用jQuery?
首先必须得了解为什么要学习JQuery,JQuery有哪些优点,当然是相对于传统的Javascript和DOM来说了,现在将JQuery的优势总结如下: 1,轻量级. JQuery非常小,压缩包只有1 ...
- (转)实战Memcached缓存系统(1)Memcached基础及示例程序
1.Cache定义 (1)狭义概念:用于CPU的相对高速处理与主存(Main Memory)的相对低速处理的之间起到协调功能的硬件设备. (2)广义概念:用于速度相差较大的两种硬件之间,起到协调两者数 ...
- C 再识数组指针 指针数组的概念
参考出处: http://www.cnblogs.com/mq0036/p/3382732.html http://www.cnblogs.com/hongcha717/archive/2010/10 ...
- 深度探索C++对象模型读书笔记(2)
以下测试平台均为vs 2012 指向Data Member的指针测试(1) #include <stdio.h> class Base1 { public: int val1; int v ...
- DigitalOcean(DO)购买VPS流程
背景: 对于一个程序员来说,拥有自己的一台国外服务器是一种多么激动的事情,尽管配置不如自己电脑的1/5,但是想一想可以不用备案搭建网站,可以搭建shadow服务器,从此通过自己的服务器上网,想一想真是 ...
- 用Unitils测试BaseDao遇到的问题总结
<Spring 3.0就这么简单>.(陈雄华,林开雄)第8章,对如何用Unitils进行测试简单介绍,下面是我用Unitils进行单元测试过程中遇到的问题的总结. 1.设置好pom.xml ...
- GridView编辑、取消按钮自定义控件
这个需求来自于论坛一位坛友提出的问题,他希望能够自定义编辑.取消按钮,而不是用GridView自带的编辑和取消.这里只当抛砖引玉,提出一些解决方案. 首先在页面前台设置一个GridView. < ...