参考链接: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. 内核代码架构图 :systemtap函数选择点

  2. 初步掌握Yarn的架构及原理

    1.YARN 是什么? 从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性, ...

  3. Java基础知识强化03:Java中的堆与栈

    1.在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JV ...

  4. PHP获取文件行数

    原文出处 提供两种实现方法,但是第一种效率最好 第一种: <?php $file_path = 'test.txt'; //文件路径 此处找一个1094644行的TXT文件 test.txt $ ...

  5. OSI 网络七层模型(笔记)

    一直以来我们都在使用着互联网,每天聊着qq,上着淘宝,但是却不了解怎么运行的呢,充满了好奇.今天同过了解来总结一下OSI网络七层模型: 上一张图 OSI (open system interconne ...

  6. 彻底删除mysql的方法(有隐藏文件)

    1.建议使用360进行卸载,可以彻底卸载软件 2.360会提醒删除注册表 3.这个隐藏文件要删除掉 在 C:\Documents and Settings\ 路径下搜索 MySQL 文件夹(默认隐藏的 ...

  7. RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)

    摘要 最近项目有个列表页需要实现线性列表和瀑布流展示的切换,首先我想到的就是上 [RecyclerView],他本身已经很好的提供了三种布局方式,只是简单做个切换应该是很简单的事情,如果要用Recyc ...

  8. VS2015 Cordova Ionic移动开发(二)

    一.创建空白Cordova应用 打开VS,选择[新建项目],选择其它语言JavaScript或者TypeScript,语言的话就按个人喜好,喜欢JS就用JS,喜欢TS就用TS,推荐使用TS书写,代码结 ...

  9. youphp学习整理

    <?php //后台公共模块 // _list 数据显示 // add 添加/编辑 视图 // insert 添加处理函数 // edit 添加/编辑 视图 // update 更新处理函数 / ...

  10. 苹果App store 2015最新审核标准公布(2015.3)

    苹果近日更新了AppStore审核指南的相关章节,对此前版本进行了修改和完善.除了增加应用截图.预览等限制外,使用ApplePay进行定期付款的应用程序必须展示每个阶段所需款额,费用归属以及如何取消. ...