UG4L11——分辨率自适应
UG4L11——分辨率自适应
本章代码关键字
1 | gObject.MakeFullScreen() //将组件大小填满屏幕 |
FairyGUI中的分辨率自适应
FairyGUI为手游开发提供了自动适应各种设备分辨率的UI适配策略
这意味着开发者只需要制作一套UI,就可以适配所有分辨率的设备
分辨率自适应具体步骤
-
制作UI时使用一套设计分辨率(以最大的全屏UI界面的大小为标准),比如:
1136*640
、1280*720
、1920*1080
等等如何确定设计分辨率:
设计分辨率的确定主要按宽高比例设计 一般考虑市面上主流设备的分辨率比例,比如
16:9
、19.5:9
等等
目前iphone主流机型分辨率比例为19.5:9
(2436*1125
) 建议采用该比例设计 (选择较大比值)
采用该比例不是说就用2436*1125
来做,因为分辨率越大,意味着图片越大,那么在使用时所占的内存就大
你可以根据自己游戏的实际情况来进行设计 比如1950*900
也是19.5:9
但是分辨率明显就小了,内存也就小了,当这个UI真正在2436*1125
的屏幕上显示时,FairyGUI会自动帮助我们把这个图片进行放大处理
只要差距不是太大,呈现出的画面是完全可以接受的 -
在Unity中通过代码或者UIContentScaler组件设置 全局缩放方式 和 设计分辨率
-
Screen Match Mode 适配模式
-
MatchWidthOrHeight
取宽和高比例较小的进行缩放例如,设计分辨率是
960*640
,设备分辨率是1280*720
那么可以得到宽边的比例是1280/960=1.33
,
高边的比例是720/640=1.125
最后取较小的1.125
作为全局缩放系数
这种缩放方式保证内容缩放后始终在屏幕内,
可能会留边,但不会超出屏幕看不到 -
MatchWidth
固定取宽的比例进行缩放(竖屏游戏建议使用)
高边可能超出屏幕(关联系统会保证控件不会超出屏幕) -
MatchHeight
固定取高的比例进行缩放(横屏游戏建议使用)
宽边可能超出屏幕(关联系统会保证控件不会超出屏幕)
-
该控件只需要在启动游戏时挂载并设置即可,或者不使用该脚本直接通过GRoot.inst.SetContentScaleFactor()去设置这些值
-
-
在FGUI中拼凑UI时,设定每个元件的关联系统对齐方式
-
对于全屏UI组件,可通过
gObject.MakeFullScreen()
和gObject.AddRelation()将组件大小填满屏幕当设计分辨率的宽高比与实际屏幕宽高比对不上时需要调用
gObject.MakeFullScreen()
(gObject
是要设置控件分辨率自适应的组件)
让UI组件下的控件根据实际屏幕的宽高比结合关联系统进行分辨率自适应以横向屏幕游戏,设计分辨率为
1365*768
的面板组件举例1
2
3
4
5
6
7
8
9void Start()
{
UIPackage.AddPackage("UI/teach");
GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
teachBinder.BindAll();
RelationPanel panel = RelationPanel.CreateInstance();
panel.MakeFullScreen(); //当屏幕大小会发生变化时,就需要执行该方法
GRoot.inst.AddChild(panel);
}当比例正好时:
当宽边较窄时(可见,未设置关联系统的控件超出了屏幕):
如果屏幕大小会发生变化,需要给组件加上关联设置gObject.AddRelation()
该方法需要在显示面板后调用,因为显示面板后GRoot
才是面板的父对象1
2
3
4
5
6
7
8
9
10
11void Start()
{
UIPackage.AddPackage("UI/teach");
GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
teachBinder.BindAll();
RelationPanel panel = RelationPanel.CreateInstance();
panel.MakeFullScreen();
GRoot.inst.AddChild(panel);
//为面板设置应该相对于GRoot或者说屏幕宽高关联,使得即使屏幕变化控件依然可以分辨率自适应
panel.AddRelation(GRoot.inst, RelationType.Size);
}