参考链接: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的多分辨率适配的更多相关文章

  1. 【转】Unity3d + NGUI 的多分辨率适配

    原文地址:http://www.cnblogs.com/cqgreen/p/3348154.html   一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS ...

  2. Unity3d + NGUI 的多分辨率适配

    一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS设备的分辨率主要有:   宽 高 宽高比 960 640 1.5 1136 640 1.775 1024 ...

  3. Unity3d + NGUI 的多分辨率适配(黑边)

    原地址:http://www.2cto.com/kf/201310/250921.html 一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS设备的分辨率主 ...

  4. 【Unity3D游戏开发】NGUI之多分辨率下完美分布式协同开发 (五)

    NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 ...

  5. Cocos与Cocos2d-x协作教程——多分辨率适配

    http://www.cocoachina.com/bbs/read.php?tid-288123.html Cocos v2.1开始新增了一种新的多分辨率适配方案:流式布局. 这种布局相比Cocos ...

  6. Android多分辨率适配

    前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...

  7. Android多分辨率适配经验总结

      Android多分辨率适配是一件很有意义但是比较麻烦的事情,网上有很多关于多分辨率适配的文章,多数文章讲解的都是整个APP的图片比较规则,可以将图片做成9图来完成多分辨率适配,但是对于一些游戏类应 ...

  8. 【转】android多分辨率适配

    前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...

  9. unity NGUI点击消息不传入到场景中去

    unity NGUI点击消息不传入到场景中去 1.今天遇到的问题是点击NGUI的按钮,场景中也相应了这个消息 解决的办法是在场景中需要互动的时候,也就是在update中进行判断 是否是点击了NGUI按 ...

随机推荐

  1. 通过SSHFS在RHEL中安全的挂载远程Linux/UNIX目录或文件系统--转载

    You can easily mount remote server file system or your own home directory using special sshfs and fu ...

  2. 为什么我选择使用 Blocks(块)

    扯淡:到了新公司接手新框架之后,发现大量的使用Blocks,之前很多时候都是使用代理,突然面对这个陌生的语法,特地科普总结了一番. 什么是Blocks 一句话概括就是,带有局部变量的匿名函数(即不带名 ...

  3. PhalGo-介绍

    PhalGo-介绍 phalgo是一个Go语言的一体化开发框架,主要用于API开发应为使用ECHO框架作为http服务web程序一样可以使用,牛顿曾经说过"如果我比别人看得远,那是因为我站在 ...

  4. tcpdump 命令行抓包工具

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3898248.html ...

  5. GitHub Desktop安装异常解决

    为了更好的共同学习,共同进步,哥们推荐我使用GitHub记录自己每天的学习记录,当下很火的提供一个分布式的版本控制系统(Git)服务的网站,GitHub提供GitHub Desktop桌面程序方便协同 ...

  6. 谁是谁的first-child

    看过CSS伪类选择器之后,心想也就如此嘛,:first-child选择元素的第一个子元素,有什么难的,可一到实践中,还是到处碰壁啊. <body> <ul class="f ...

  7. Git CMD - pull: Fetch from and integrate with another repository or a local branch

    命令格式 git pull [options] [<repository> [<refspec>…​]] 命令参数 -q, --quiet 安静模式. -v, --verbos ...

  8. 多列的行列转换(PIVOT,UNPIVOT)

    形式1 形式2 形式3 有时候可能会有这样的需求: 将一张表的所有列名转做为数据的一列数据,将一列数据作为整张表的列名 当列比较多时,只用PIVOT是解决不了的,经过研究,需要将UNPIVOT 和 P ...

  9. sql server查询时候注意的基本优化常识

    1.在Where条件中尽量不要在=号左边进行函数.运算符.或表达式计算 2.在Where中尽量避免出现!=或<>操作符: 3.在Where中尽量避免对字段进行null值判定: 4.使用Li ...

  10. iOS英文 汉化,如调用相册,相机改“cancel”,“photos”为“取消”,“相机”

    调用系统相册.相机发现是英文的系统相簿界面后标题显示“photos”,但是手机语言已经设置显示中文,纠结半天,最终在info.plist设置解决问题. 只需要改三个地方: 1.plist文件中: 2. ...