iphoneX由于带有各种传感器,不得不搞了个刘海屏,各个国产手机也跟了一波风,手机传感器塞的很爽,但苦逼的开发者又增加了新工作——为app增加刘海屏适配。
在游戏里面,很多UI都是紧贴屏幕边缘的,这样就会被刘海屏的刘海盖住,无法点击。网上找了几种适配方案,有的是直接缩短游戏宽度,刘海的部分是一条整齐的黑边。我觉得这样的方案不好,毕竟它缩短了游戏显示宽度;另一种方案是只将UI的部分向刘海内侧推动一截,其余不变,场景还是原来的宽度。我觉得这个方案比较好一些,相对不影响游戏的视角观感。
实现方式:
1首先要检测是否是刘海屏。这里可以使用平台和分辨率来判断,也可以读取SystemInfodeviceModel获取设备型号,或者用这个UnityEngineiOSDevicegeneration也可以,主要是要实现这么个接口就好。
2如果是刘海屏,对需要设置适配的UI(只有那些交互元素贴边的UI需要适配,其余不需要),设置其最底层Panel的offsetMin或者offsetMax (有的博客是直接在刘海屏上同时设置offsetMin和offsetMax,也就是四边都往里缩进,我觉得不太好,毕竟只有一边有刘海,其他的边不需要缩进,否则会缩小游戏场景部分的显示范围) 。这里设置的宽度值我参考他人的博客使用44f,效果还是可以的。
3如果你的游戏允许左右转屏,那么还要监听屏幕转动事件,再根据屏幕方向去设置offsetMin或offsetMax。
最后,现在貌似出了一种技术,可以把传感器直接藏在透明的屏幕下方;也有厂商把传感器放在手机夹层里,需要使用的时候再从屏幕上方d出来。总之希望刘海屏和各种类似的Notch屏赶快淘汰,一整面完好无损的大屏才是审美,Notch什么的太逼死强迫症了。
unity怎样实现全屏间的切换以及设置屏幕分辨率
------------------------
Unity3d发布成exe项目后的设置(全屏自适应屏幕大小)
1 去除启动exe项目时出现的画面窗口
File ☞ Build Settings ☞Pc and Mac Standalone ☞ Player Settings ☞Resolution and Presentation ☞Display Resolution 选项改为 Dialog Disabled
注:去除启动画面后打开方式是在启动exe项目时单击键盘上的alt键。
2 启动exe后改变项目的窗体大小
改变屏幕大小函数:ScreenSetResolution();
先在Game视图中拖拽出dropDownList(IGUI)控件,选中dropDownList在属性中设置Visible List Item Count为3 (一般默认就为3),修改Options值Options1,Options2,Options3分别改为800600,,1024768,1280720,双击dropDownList控件进入选择事件代码:
运行,调试查看左下角的信息,发布成exe选择dropDownList就可以改变窗体大小。
3 启动exe后动态改变项目的图形效果
函数:QualitySettingscurrentLevel=QualityLevelFastest;(当前图像质量级别)可改变的级别有:
测试示例如第2个,你懂的。
4补充
全屏:ScreenfullScreen=true;
关键点:
0自适应的测试:通过设置多种的屏幕大小进行测试,测试时最好要打开Maximize on Play,在屏幕放大的情况下容易观察自适应情况
1所谓的自适应,就是:
a保持相对位置不变。例如UI设计在屏幕的左上角,那么在各种的分辨率下都应该在左上角
b保持宽高比例不变。由于分辨率有很多种,所以保持宽高等比例缩放是做不到的,要么是宽拉伸缩放的程度大些,要么是高拉伸缩放的程度大些
2在UGUI中,可以通过设置UI的描点来设置UI的相对位置;可以通过设置Canvas下的Canvas Scaler来设置UI的缩放比例(Canvas下的Canvas是用来处理UI遮挡关系的)
3Canvas Scaler组件:
a当UIScaleMode为Constant Pixel Size时,UI在任何分辨率下都不会进行缩放拉伸,只有通过改变Scale Factor才会进行缩拉,因此不推荐使用该模式(而这种模式的优点就是你可以通过写自适应算法来改变Scale Factor的值,代替unity的自适应算法)
b当UIScaleMode为Scale With Screen Size时,相当于使用unity的自适应算法,此时unity会根据屏幕分辨率自动调节Scale Factor的值。在做自适应时,一般要先选择一种比较主流的分辨率(即比较多的机型都采用这种分辨率)进行UI的设计,例如采用1024x576,在这里就是设置Reference Resolution的值了。
然后就是Screen Match Mode这个东西了:
当值为Match Width Or Height时:当值为0即处于Width那端时,表示屏幕高度对于UI大小完全没有任何影响,只有宽度会对UI大小产生影响。例如设置屏幕为800600,然后改变为800300,屏幕高度变小了,但UI并没有进行缩拉;同理当值为1即处于Height那端时,表示屏幕宽度对于UI大小完全没有任何影响,只有高度会对UI大小产生影响
当值为Expand时:举个例子,设计了一个button宽高为200100,即宽高比为2:1,放在4:3的屏幕内;然后把这个button放在16:9的屏幕内,显然地,此时button是不能进行等比例的缩放的,即无法保持2:1的宽高比了,Expand的意思就是尽可能地使UI拉伸来适应屏幕
当值为Shrink时:同理,就是尽可能地使UI缩放来适应屏幕
4一般来说,比较不错的设置就是:
Canvas Scaler 选择 Scale With Screen Size
Screen Match Mode 选择 Match Width Or Height,比例设为1,即只和高度进行适配。更多unity插件,就在纳金论坛上去查看。
有多个解决办法:
1检测屏幕位置,通过检测触摸位置的坐标是否为左半侧或者右半侧来执行相应方法,就是获取当前点击位置的屏幕坐标的x和y的值与屏幕总尺寸的宽高对比
2使用Eventtrigger组件,在左右两侧分别放置两个透明的ui组件,使用on drag来检测手指触摸,执行相应方法
其实 Unity3D 安卓版,对于不同的分辨率,我们只需要设置 一个唯一的屏幕显示区域比(说白了就是宽高比),这样显示区域就不会随分辨率的改变而拉升。
上代码:
using UnityEngine;
using SystemCollections;
public class Resolution : MonoBehaviour {
public Camera mainCamera;
void Start()
{
//ScreenSetResolution(1280, 800, true, 60);
mainCamera = CameramainCamera;
// float screenAspect = 1280 / 720; 现在android手机的主流分辨。
// mainCameraaspect ---> 摄像机的长宽比(宽度除以高度)
mainCameraaspect = 178f;
}
}
把此代码脚本绑定在 MainCamera 上就OK了,这样就不会导致不同分辨率下屏幕显示区域大小不一的问题!
以上就是关于Unity屏幕适配之——刘海屏全部的内容,包括:Unity屏幕适配之——刘海屏、unity怎样实现全屏间的切换以及设置屏幕分辨率、unity中ui界面,使用的是ugui插件,创建的界面,如何自适应不同的窗口大小。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)