当前位置: 首页 > article >正文

Unity UI SafeArea适配

手机的分辨率有很多中,而运行在手机上的游戏不可能对所有的分辨率都一一对应的制作UI,所以需要一种方法使UI在多种分辨率下进行缩放,以此来达到适配目的。

首先搭建如下UI:

如果设置画布来缩放UI可看Unity官网如下的链接:

设计用于多种分辨率的 UI - Unity 手册

接下来选择Canvas Scaler的UI缩放模式,以及项目UI的设计分辨率。

注:

在画布缩放器组件中,可将其 UI Scale Mode 设置为 Scale With Screen Size。使用此缩放模式,可以指定要用作参考的分辨率。如果当前屏幕分辨率小于或大于此参考分辨率,则会相应设置画布的缩放因子,使所有 UI 元素都与屏幕分辨率一起放大或缩小。

如果Screen Match Mode选择的是 Match Width Or Height,则或显示Match 的属性,此属性值可以是 0(宽度)、1(高度)或介于两者之间的值。默认情况下设置为 0,表示将当前屏幕宽度与画布缩放器宽度进行比较,如果 Match 属性设置为 0.5,则会将当前宽度与参考宽度做比较并将当前高度与参考高度做比较,并选择两者之间的缩放因子。

更多详情参考Canvas Scaler链接:

画布缩放器 (Canvas Scaler) - Unity 手册

然后将其分辨率改变之后,UI就可以按当前分辨率放大缩小了。

 现在将Unity的Game窗口切换到Simulator

然后就会出现对应型号的手机屏,比如选择iPhone X

从上图可以看到有部分UI被遮挡了, 

Unity有一个SafeArea的API可以处理这个问题

Screen-safeArea - Unity 脚本 API

SafeArea获得的是以像素为单位的屏幕安全区域。

将UI窗口的UI元素组件放置到一个空物体的子物体层级下:

注:空物体的需要将锚点预设选择为(铺满屏幕)才有效。

新建一个SafeAreaScaler脚本,挂载到SafeArea上,

获取Safe安全区的信息,然后计算锚点的最大最小值并归一化

Rect safeArea = Screen.safeArea;
Vector2 anchorMin = safeArea.position;
Vector2 anchorMax = safeArea.position + safeArea.size;

anchorMin.x /= Screen.width;
anchorMin.y /= Screen.height;
anchorMax.x /= Screen.width;
anchorMax.y /= Screen.height;

//设置SafeArea空物体的RectTransform
_rectTransform.anchorMin = anchorMin;
_rectTransform.anchorMax = anchorMax;

结果:

参考链接:

Unity Scalable UI Tutorial - Create UI For Any Resolution | Scalable Canvas Settings in Unity (youtube.com)

Unity UI Mobile Safe Area | Make UI visible on all resolutions and devices (youtube.com)

Master Safe Area in Unity | Essential Mobile UI Design Tutorial (youtube.com)

Set in Unity UI Mobile Safe Area In All resolution and Device (youtube.com)


http://www.kler.cn/a/443185.html

相关文章:

  • 面试:C++类成员初始化顺序
  • uml活动图和用例图之间有一致性要求吗
  • 使用 C++ 实现神经网络:从基础到高级优化
  • 是德科技M9010A PXIe 机箱+M9037A模块,台式应用的理想之选
  • git相关操作笔记
  • 04、Redis深入数据结构
  • vue-element-admin npm install 安装失败,tui-editor更名导致
  • API接口性能优化:提升电商数据处理速度的关键
  • 错误处理中间件 VS 异常过滤器 net Core
  • 深入解析ENAS中的共享权重机制
  • pyparsing restOfLine
  • 基于xss-lab的绕过
  • 华纳云:如何实现tomcat自动化部署?
  • 【Yonghong 企业日常问题03】如何在Linux系统上部署Yonghong DM-Engine v2.3.1(一键安装指南版)
  • 随手记:小程序使用uni.createVideoContext视频无法触发播放
  • Excel+VBA+FFmpeg全能图片处理利器:批量选择、调整尺寸、压缩质量、图片合并,水平垂直合并一键搞定!
  • 【C++】sophus 计算机视觉和机器人技术中的二维和三维李群 (一)
  • WPF MVVM 数据表格DataGrid的表头Header无法进行数据绑定
  • Java全栈项目:校园共享单车管理平台
  • 红狮金业:央行利率决议对贵金属市场的影响
  • A5433 Java+Jsp+Servlet+MySQL+微信小程序+LW+在线点餐小程序的设计与实现 源码 配置 文档
  • 说说es6 promise async await 以及 promise A+规范的了解
  • 使用winscp从windows访问Ubuntu进行文件传输
  • MySQL高级技术:性能优化与死锁处理
  • 深入解析Ubuntu 20.04中ROS的catkin_make工具
  • 《鸿蒙开发-答案之书》字符串占位符格式化