Unity NGUI的多分辨率适配
参考链接:http://blog.csdn.net/mfc11/article/details/17681429,作者:CSDN mfc11
1、NGUI默认的适配方式:
NGUI默认是适配方式是根据高度适配,高度适配的具体设置可以参看连接:http://www.cnblogs.com/vitah/p/3942392.html。
2、使用默认适配方式可能出现的问题:
当目标设备的宽高比与所编辑页面的宽高比一致时,整个UI将完美显示;当目标设备宽高比小于所编辑的宽高比时,页面宽度将大于设备宽度,使得多出的部分无法显示;而当目标设备宽高比大于所编辑宽高比时,页面宽度小于设备宽度,设备两边将出现黑边。
3、使用UIAnchor:
UIAnchor则是将整个页面分为TopLeft/Top/TopRight/Left/Center/Right/BottomLeft/Bottom/BottomRight九个区域,挂载了UIAnchor组件的节点都将按照设置自动停靠到相应的区域中。有了UIAnchor,上面的两个问题将被一定程度的解决:当目标设备宽高比小于编辑的宽高比时,由于UIAnchor的自动停靠功能,UI不会被裁切掉,但UI之间的左右间距将相应变小,有可能出现UI重叠的问题;当目标设备宽高比大于所编辑宽高比时,UI之间的左右间距将变大,好在这样起码不会有UI被裁切或重叠。
这种使用UIAnchor的方法,只需要解决可能出现的UI重叠的情况,不过当有出现全屏的sprite时,一张铺满整个屏幕的UISprite不管是否使用UIAnchor,在目标设备宽高比更小时,sprite都会在横向上被裁切,而将目标设备宽高比更大时,sprite都不能铺满整个屏幕。
4、在使用UIAnchor时需要调节UI显示的问题:
总结下就三个问题:
(1)设备宽高比比所给UI的宽高比更小时,UI的重叠问题;
(2)设备宽高比比所给UI宽高比小,全屏sprite被裁切;
(3)设备宽高比比所给UI宽高比大,全屏sprite不能铺满整个屏幕;
5、设备宽高比比所给UI的宽高比更小时,UI的重叠问题的解决方式:
当设备宽高比比所给UI宽高比更小,UI Root会根据UI的高度调节scale大小,使得设备宽度不足以显示全部全部的UI内容,我们可以调节摄像机的Camera.orthographicSize(仅适用2D GUI),以足够显示页面的宽度。即,改变了NGUI原有的“高度适配”原则,转为“宽度适配”,使得整个页面都得以显示,而由于UIAnchor的存在,UI的左右间距保持不变,但上下间距会变大。给出代码,挂载在UI Root下的Camere对象上:
using UnityEngine;
using System.Collections; public class UIAdjust : MonoBehaviour
{
// 所给UI的宽高
private float standard_width = 1280f;
private float standard_height = 720f; // 设备的宽高
private float device_width = 0f;
private float device_height = 0f; public void Awake()
{
// 获取设备的宽高
device_width = Screen.width;
device_height = Screen.height; SetCameraSize();
} private void SetCameraSize()
{
float adjustor = 0f; // UI的宽高比
float standard_aspect = standard_width / standard_height; // 设备的宽高比
float device_aspect = device_width / device_height; // 设备宽高比小于UI的宽高比,调节Camere的orthographicSize,使设备的宽度能显示全部UI,即在高度适配的基础上再按宽度适配
if (device_aspect < standard_aspect)
{
adjustor = standard_aspect / device_aspect;
camera.orthographicSize = adjustor;
}
}
}
上诉代码可以解决非全屏的UI适配问题;
6、在5步骤的基础上,全屏sprite的显示问题:
在5步骤的基础上,全屏sprite的显示会出现两个问题:
(1)设备宽高比更小时,sprite上下不填满:
(2)设备宽高比更大时,sprite左右不填满;
这时候我们根据对应的比例调节全屏sprite在上下方向和左右方向的scale值即可,前提是该sprite可以拉伸,如果是不能拉伸的sprite需要采用其他的方法,给出全屏sprite的适配代码,挂载在需要全屏显示的sprite下:
using UnityEngine;
using System.Collections; public class FullScreenSpriteAdjust : MonoBehaviour
{
private float standard_width = 1280f;
private float standard_height = 720f;
private float device_width = 0f;
private float device_height = 0f; void Awake()
{
device_width = Screen.width;
device_height = Screen.height;
SpriteAdjust();
} void SpriteAdjust()
{
// 图片标准的宽高比
float standard_aspect = standard_width / standard_height; // 设备的宽高比
float device_aspect = device_width / device_height; float scale_x = ;
float scale_y = ; // 设备宽高比大于图片宽高比,sprite左右不填满
if (device_aspect > standard_aspect)
{
scale_x = device_aspect / standard_aspect;
}
// 设备宽高比小于图片宽高比,sprite上下不填满
else if (device_aspect < standard_aspect)
{
scale_y = standard_aspect / device_aspect;
} gameObject.transform.localScale = new Vector3(scale_x, scale_y, gameObject.transform.localScale.z);
}
}
文章中内容几乎是复制参考链接的,感谢作者给出的想法。代码是自己写的,如果有更好的方法可以留言或者邮箱:linw1225#163.com(#换成@)~·
Unity NGUI的多分辨率适配的更多相关文章
- 【转】Unity3d + NGUI 的多分辨率适配
原文地址:http://www.cnblogs.com/cqgreen/p/3348154.html 一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS ...
- Unity3d + NGUI 的多分辨率适配
一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS设备的分辨率主要有: 宽 高 宽高比 960 640 1.5 1136 640 1.775 1024 ...
- Unity3d + NGUI 的多分辨率适配(黑边)
原地址:http://www.2cto.com/kf/201310/250921.html 一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS设备的分辨率主 ...
- 【Unity3D游戏开发】NGUI之多分辨率下完美分布式协同开发 (五)
NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 ...
- Cocos与Cocos2d-x协作教程——多分辨率适配
http://www.cocoachina.com/bbs/read.php?tid-288123.html Cocos v2.1开始新增了一种新的多分辨率适配方案:流式布局. 这种布局相比Cocos ...
- Android多分辨率适配
前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...
- Android多分辨率适配经验总结
Android多分辨率适配是一件很有意义但是比较麻烦的事情,网上有很多关于多分辨率适配的文章,多数文章讲解的都是整个APP的图片比较规则,可以将图片做成9图来完成多分辨率适配,但是对于一些游戏类应 ...
- 【转】android多分辨率适配
前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...
- unity NGUI点击消息不传入到场景中去
unity NGUI点击消息不传入到场景中去 1.今天遇到的问题是点击NGUI的按钮,场景中也相应了这个消息 解决的办法是在场景中需要互动的时候,也就是在update中进行判断 是否是点击了NGUI按 ...
随机推荐
- URAL 1062 - Triathlon(半平面交)
这个题乍眼一看好像很简单,然后我就认为u.v.w只要有全部比另外一个人小的就不能win,否则就能win,但是这个思路只对了一半 不能win的结论是正确的,但是win的结论不止排除这一个条件 将这个人与 ...
- 如何自定义echarts主题
上一篇,选择echarts原有的主题样式,那么如何自定义自己的主题 与选择原有主题类似 1.echarts官网地址http://echarts.baidu.com/echarts2/doc 在工具中 ...
- EXCEL插件
http://www.cnblogs.com/brooks-dotnet/category/233027.html http://www.360doc.com/content/15/0713/00/1 ...
- jquery几个常用的demo
新建两个页面.一个叫做 ---- demo1.js------- 一个叫做 ----- demo1.html----- 代码分别如下 <!DOCTYPE html> <html l ...
- Axiom3D学习日记 4.地形,天空,雾
首先需要引用Axiom.SceneManagers.Octree.dll. 地形: 载入地形配置,从一个文件中. scene.LoadWorldGeometry( "Terrain.xml& ...
- 关于XML(一)。
关于XML 什么是XML? XML是可扩展标记语言.类似于HTML,XML的宗旨是旨在传输数据,而非显示数据.其标签没有预定义,您需要自行定义标签.XML具有自我描述性,是W3C的推荐标准. XML与 ...
- 控件AutoCompleteTextView实现动态匹配输入内容的一种输入框
<AutoCompleteTextView android:layout_width="match_parent" android:layout_height="w ...
- MySQL性能测试工具之mysqlslap使用详解
mysqlslap是mysql自带的基准测试工具,优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较.msq ...
- POJ 2391.Ombrophobic Bovines (最大流)
实际上是求最短的避雨时间. 首先将每个点拆成两个,一个连接源点,一个连接汇点,连接源点的点的容量为当前单的奶牛数,连接汇点的点为能容纳的奶牛数. floyd求任意两点互相到达的最短时间,二分最长时间, ...
- 【BZOJ2809】【splay启发式合并】dispatching
Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级. ...