NGUI 自适应(基于FixedSize)

很长一段时间被屏幕自适应搞得很晕,这里总结下最近的学习感悟。

首先明白几个概念:

  1、屏幕分辨率(手机常用1280*720,800*480等)

  2、图片分辨率(图片大小 256 * 256等)

游戏开发时,规定好标准的适配机型,这里机型以1280*720为例,所有制作的图片在1280*720的机型上将没有任何缩放。NGUI的UIRoot可以选择Scaling Type,这里选择FixedSize,此时可以在Manaul Height栏输入标准机型的高度,于是这里输入720,此后的屏幕自适应都将以这个高度来进行等比缩放。假设我们在Panel下创建了一个sprite,摆好位置后,该sprite的位置是<320,180,0>,sprite的大小为100*100。将该UI放入480*320的手机后,sprite的大小会根据当前设备高度进行缩放:

  缩放后的sprite大小 = 设备高度/标准分辨率高度 * <sprite宽,sprite高> ,这里缩放后的大小为 : 320/720 * <100,100> = <44.44,44.44>

  缩放后的位置 = 设备高度/标准分辨率高度 * <x,y,z> ,这里缩放后的大小为 : 320/720 * <320,180,0> = <142,80,0>

  这里就完成了一次屏幕适应。

  再举一个例子,如果图片的大小为1280*720,位置为<0,0,0>,在标准分辨率下该图片恰好和屏幕大小相同,将该图片放入480*320的手机后,

  缩放后大小 320/720*<1280,720> = <568,320>

  缩放后位置 320/720* <0,0,0> = <0,0,0>

屏幕大小为<480,320> ,因此该图片的两边将会被裁减。1280*720的宽高比为1.7:1, 480*320的宽高比为1.5:1,因此基于高度的自适应不适合适配宽高比更小的机型。

要解决这个问题,可以用基于宽度的自适应方式(原理同基于高度缩放一致)。

  自适应需要解决的另一个问题是sprite位置自适应的问题,假设一个sprite想要靠在屏幕的最左边,该sprite的大小为100*100,可以将该sprite挂上UIAnchor脚本,container选择UIRoot,Relative offset中选择 x = -0.5 (代表屏幕的最左边,0代表中间,0.5代表最右边),Pixel Offset中 x选择1/2的图片大小,这里为50(代表图片中心距离屏幕边缘恰好为图片的一半,即图片紧贴屏幕边缘),这样设置以后无论怎样缩放,图片的位置都距离屏幕最左边1/2的图片宽度,可以实现图片位置的自适应。

时间: 2024-08-24 08:44:33

NGUI 自适应(基于FixedSize)的相关文章

Unity3D NGUI自适应屏幕分辨率(2014/4/17更新)

原地址:http://blog.csdn.net/asd237241291/article/details/8126619 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 本文链接地址:Unity3D NGUI自适应屏幕分辨率 1.UIRoot:根据高度自适应屏幕分辨率. NGUI根目录的UIRoot组件自带了根据高度自适应分辨率的功能. Scaling Style属性可选择三种不同的缩放策略. PixelPerfect 完美像素:直接显示设定好的像素.当屏幕高度低于minimum

ngui自适应

增加UIROOT using UnityEngine; namespace Com.Xyz.UI { [ExecuteInEditMode] [RequireComponent(typeof(UIRoot))] public class UIScreenAdaptive : MonoBehaviour { public int aspectRatioWidth = 1280; public int aspectRatioHeight = 720; public bool runOnlyOnce

说话人自适应技术

说话人自适应技术 (Speaker Adaptation ,SA):非特定人 (Speaker Independent ,SI):特定人 (Speaker Dependent ,SD) 『SA+SI』 自适应凡是分类:批处理式.在线式.立即式 | 监督 无监督 自适应经典算法:基于最大后验概率 (Maximum a posteriori ,MAP) 的算法.基于变换的算法『Tip : 先学习SI语音识别技术』 基于最大后验概率 (Maximum a posteriori ,MAP)算法 基本MA

将当前UI配置写入文件,并且恢复

处理NGUI自适应问题时,如果UI只是在边角,那么使用Anchor就可以解决,但是当使用那些铺满屏幕的UI时,使用anchor可能就会造成ui的重叠. 一个解决办法是针对不同的分辨率,去调整UI的位置和大小,然后保存为配置文件,这样针对不同的分辨率再恢复即可. 针对这两个操作,做了一个保存和恢复的编辑器工具. 特点是能够弹出Game视图至指定分辨率. 另外NGUI的大小实际上是通过widget的size来控制的,但是那是一个protect变量,我将其改为了public,这样调整size后,就必须

NGUI之UIRoot屏幕分辨率自适应

来自:http://blog.csdn.net/oneRain88/article/details/11713299 NGUI在Unity3D游戏开发中非常常用,而NGUI对于每一个UI场景,都是以一个UIRoot为UI游戏对象树的根的,那么这个UIRoot是起什么作用的呢? 先简单看一下UIRoot中的基本属性 UIRoot游戏对象的属性只有4个,分别是缩放规则,手动高度,最小高度和最大高度 而正是这4个属性,将影响整个UI场景中整体的缩放比例,当设置好这4个属性之后,UIRoot游戏对象的相

Unity3D开发(一):NGUI之UIRoot屏幕分辨率自适应

原地址:http://blog.csdn.net/onerain88/article/details/11713299 NGUI在Unity3D游戏开发中非常常用,而NGUI对于每一个UI场景,都是以一个UIRoot为UI游戏对象树的根的,那么这个UIRoot是起什么作用的呢? 先简单看一下UIRoot中的基本属性 UIRoot游戏对象的属性只有4个,分别是缩放规则,手动高度,最小高度和最大高度 而正是这4个属性,将影响整个UI场景中整体的缩放比例,当设置好这4个属性之后,UIRoot游戏对象的

NGUI学习笔记(三):屏幕自适应

我们开发移动端游戏的时候,一般都会选择Constrained/FixedSize的缩放模式来保证图片在不同的分辨率下相对于屏幕的尺寸保持一致,但是对于屏幕自适应来说,这还是不够的,不同的手机存在不同的高宽比,所以需要引入相对位置的概念. NGUI作为一款成熟的UI插件,为我们提供了成熟的屏幕自适应技术. Anchor组件 我们可以创建一个Anchor组件到舞台,Anchor即锚点,其作用是可以指定为摄像机的9个点(分别是:上左.上.上右.左.中.右.下左.下和下右)为其锚点,当摄像机的尺寸变化(

【NGUI】屏幕自适应(不用UIStretch,用UIRoot)

原地址:http://blog.csdn.net/lzhq1982/article/details/18814023 这篇文章是转载的,之前用UIStretch做屏幕自适应,但一直有两个硬伤让我难受,一是屏幕被随意拉伸后,里面的UI就不是我想要的比例了,明明一个圆形变成椭圆了,一个高挑的美女变成一个肥姐了,好吧,这如果还能忍,那第二条真是让我尝尽了各种方法,那就是panel的裁剪用不了了,想做Scroll View做不了了,然后百度才知道要Panel做裁剪必须要求其scale和其父一直到根节点的

NGUI 界面自适应

关于 NGUI 的界面自动适应不同的手机分辨率,网上已经够多的了.如果你点进了这个网页,推荐一下这一篇吧: http://www.xuanyusong.com/archives/2536 下面是我自己的总结: 首先,为什么手机游戏不要使用 UIRoot.PixelPerfect? 这个选项会使图片按照原始的大小显示在手机上.会有什么问题呢? iPhone 3GS 分辨率是 480x320,iPhone 4 是 960x640.也就是说,宽高刚好1:2的关系.如果使用了 PixelPerfect