Unity项目发布后屏幕自适应问题

    阅读此篇文章之前,你应该初步熟悉Unity的UGUI系统操作。

    如果仅想实现屏幕自适应,那么只需观看斜体带下划线的文字即可,其他的文字都是解释。

    我们都知道,不同的设备,屏幕分辨率也通常是不同的,我们开发游戏或者应用的时候肯定要考虑到这个问题,总不能只在开发者你的手机上运行吧,那么这篇文章讨论的就是关于Unity的UGUI系统的屏幕自适应问题。

   Canvas,unity的画布,相信对UGUI有初步了解的人应该会知道他的功能,我们2d游戏会显示在画布上,包括一些控件,图片。

    Unity项目发布后屏幕自适应问题_第1张图片

    我们鼠标点击画布,在Hierarchy视图中会出现Canvas的一些属性

Unity项目发布后屏幕自适应问题_第2张图片

    我们把Render Mode的属性设置为Screen Space。我们来看Canvas里面的Render Mode属性,Screen Space - Overlay这个属性的作用是让画布直接覆盖屏幕,好处是我们不需要相机,坏处是我们无法在被画布覆盖的范围添加其他画布,不是添加不了,而是添加后无法显示,因为Overlay这个属性找不到层次.Screen Space - Camera这个属性的作用是让画布覆盖相机,我们知道相机可以有很多个,但屏幕只能有一个,所以在这种模式下,我们可以建两个画布,建两个相机与之对应,我们给两个相机的z附上不同的值,这样的话,两个画布就有了层次,并且能同时显示.WorldSpace属性,这个属性我们一看名字就能明白,这个属性是针对世界坐标的,意思是我们可以创建3D的UI,并且能在UI上显示出三维的效果。

    在Screen Space模式下,我们可以给Canvas拖一个相机,因为这里我们只有一个Canvas,所以我们给之一个主相机就可以了。

Unity项目发布后屏幕自适应问题_第3张图片

    Canvas Scaler中,UI Scale Mode属性表示了在不同分辨率下,UI怎么缩放,我们要让UI自适应屏幕,1。所以我们选Scale With Screen Size,属性,这种情况下有个好处,看我们下面的 XY值分别设置成了1280,720,在Scale With Screen Size下,意味着我们游戏中的参数只需针对1280,720设置就可以了,大家可能不太懂,举个例子,下面Match的值,Match Width or Height,我们吧Match的值设为0,就代表屏幕针对宽进行缩放,就意味着,如果屏幕的宽变成了640,那么你在游戏中写脚本,让物体移动1280,那么他真实的移动并不是1280,而是640,因为Unity自动进行了适应.2。当我们把UI Scale Mode设置为Constant Pixel Size的时候,Unity不会对长宽进行缩放,就代表我们的屏幕宽度为640,那么你在脚本中写让物体移动1280,其实他实际就是移动了1280.这两种属性各有各的好处,Constant Pixel Size我们需获取Screen.width和Screen.height,并且游戏中所有关于UI像素的值都需要针对Screen.width和Screen.height设置.Scale With Screen Size我们在脚本中的所有关于像素的值,仅需按照我们设置的长宽进行适应,即那个1280,720,这样会给我们很多方便,但是有些时候会出现一些小问题,当然如果技术精的话,选哪个都是没有问题的。

    那么我们对画布的设置已经完成了,我们基本也实现了自适应,但是有一个问题没有解决,我们上面设置的是让屏幕针对画布的宽进行自适应,如果我们编辑的宽高为1280和720 ,但真实的屏幕宽高为640和480,那么匹配为宽度的话,代码中的宽1280对应着480,那高720对应着多多呢?480?我们可以计算一下,1280/640 =?/ 480,对,没错,“?”就是我们想要的值,?= 1280 / Screen.width * Screen.height,为什么要计算这个值呢,我们在游戏中,一旦涉及到屏幕高的时候,我们一定要用“?”的值,而不要用那个720,至此结束,附上这个最后一段适应高的代码。

int width = 1280;

int height =(int)(Screen.height * 1280.0 / Screen.width);

//我们在游戏中设计到屏幕宽高的时候要用width度和height的值

 


    由于本人也是小白,有哪些问题的话欢迎交流。

 

 

 

 

你可能感兴趣的:(Unity)