屏幕自适应
开发的核心问题:UI随屏幕自适应。
就是要尽可能的保证在尽可能多的手机上正常的显示出我们的游戏UI,不出现排版错乱,按钮混乱,大小不一致的情况。我们使用Unity开发的游戏项目的客户端部分不得不面对我们发布出去会有有各种各样机型的玩家来使用,他们的设备都有不同的分辨率和宽高比。这将会对我们的UI制作造成巨大的影响,为了保证在更多的手机上显示的比例内容都正常,那么我们必须要想办法来做UI的多分辨率适配。
一般来说,我们UIRoot都会选择FixSize的缩放模式,这样可以让UI随着分辨率而自动缩放,这样可以保持和屏幕大小比例不变,让UI整体看上去不会有太大的变化,但是还有一个问题就是不同屏幕的宽高比不一样。
我们在Unity中可以看到,一般都会以高度为基准而拉伸宽度,比如4:3的屏幕换到16:9的屏幕上明显屏幕就被拉宽了。下面我们在4:3的屏幕4个角放置4个精灵图片,然后切换到16:9就会发现了.
主流设备的分辨率
iphone的话基本只考虑iphone4s或者iphone5以上的机型了。iphone的宽高比是16:9的,ipad是4:3的比例 android平台的话现在1000-2000的手机1080*1920的分辨率的,例如小米3,小米4
自适应核心组件Anchor的使用(老版本中会有这个组件)
NGUI是解决自适应比较成熟和强大的了,原因就是有Anchor组件,Anchor就是锚点,它的原理就是它会自动的更具绑定的物体某一个点作为锚点,一共有九个点可以设定,当相机变动的时候,Anchor组件所在的物体位置也会跟随相机的变动而变动,并始终处于相机边界的锚点位置。
我们一般都会在Anchor下创建子物体,这样绑定在这个Anchor下面的物体都会被绑定到我们确定的锚点位置。例如我们把锚点设置在左上角,那么这个锚点之下的物体都会跟随父物体进行变化,从而实现相对位置不变的作用,来实现UI控件的随屏幕自适应。 我们可以直接在NGUI菜单中creat-Anchor即可。
不过现在每个组件中都自带Anchor组件了,我们一般就不在使用Anchor组件了,都直接在某个UI控件上来进行调整就是我接下来要讲解的。
这里有些建议,我们在正式开发UI之前一定要和策划还有项目组明确几个事情 (1)我们开发的游戏是针对什么样的平台?iOS,Android,PC或者网页平台,这个就关系着我们的UI具体来怎么做了。 (2)我们游戏的设备的屏幕快高比最大、最小是多少?4:3 16:9,还是说其他什么比例 (3)我们游戏开发时的标准分辨率是多少像素?这个关系到我们美术制作图片资源的标准,也非常的重要。 (4)和策划沟通我们的UI草图和方案,明确哪些UI会在屏幕需要变化来适应分辨率的大小 (5)明确需要自适应位置的UI分别属于哪一个锚点,并设计一个最佳的UI结构。
UI元素的相对自适应。
就是指两个UI元素之间保持一种相对的位置不要变化,比如我们制作一个背景框,不论屏幕尺寸怎么样我们都希望这个背景框的边缘距离屏幕50像素,那么我们设置了之后,就设置它的边缘距离上下左右都是50即可。
在Unity中我们可以看到基本每个基础组件下面都有一个Anchor锚点组件,这个现在在最新版本里面都有。
接下来我们来了解下这个Anchor选项的工作原理
(1)我们来看一下Type为我们的Anchor定位的类型,分为None,默认为无相对定位,Unified,统一的标准定位,Advanced,高级定位,统一定位和高级定位的区别在于,高级定位的话能够设置更为复杂的定位,他们的原理其实都是一样的。 (2)Execute,设置相对定位执行的时机,有三个选项可以选择,OnUpdate,OnEnable,OnStart.Unity中这三个函数是自动执行的脚本函数 OnUpdate,则这个控件会随着每一帧都去进行更新位置, OnEnable,那么就表示控件只会在激活的时候更新一次定位就不再更新了直到下次再次被激活。 OnStart,那么这个控件在场景加载之后只会更新一次相对定位信息。 一般来说,为了节约性能照顾需求,我们会选择OnEnable,如果有特殊的需求的话,我们才会选择OnUpdate (3)Target,就是我们选择的参照物了,就是以哪个作为基准,一般我们都是以根目录UIRoot为基准的。 (4)接下来就是对应的参数,上下左右的位置以及以目标的哪里为基准了
五、注意事项 (1)新版本NGUI中我们一般都较少直接使用Anchor组件了,一般都用UI元素上的Anchor来进行控制了。不过工作量较大,我们可以考虑在父物体上进行定位。 (2)使用Anchor的时候,一定要注意,很可能会导致控件变形,所以要多尝试变化分辨率的大小 (3)如果不希望形变的话,那么就把组件的四个点都已同一个点,一般我们都用Target‘s Center作为参考点。 (4)使用Anchor来进行相对定位的时候,一定要深刻了解其原理,并且多多测试不同分辨率,来尽可能的保证UI不混乱和出错。