Unity UI适配规则和对热门游戏适配策略的拆解
前言
本文会介绍一些关于UI适配的基础概念,并且统计了市面上常见的设备的分辨率的情况。同时通过拆解目前市面上较为成功的两款休闲游戏Royal Match和Monopoly GO(两款均为近期游戏付费榜前几的游戏),大致推断出他们的适配策略,以供学习和参考。
基础概念
设计分辨率:设计分辨率是指在游戏开发中用来制作游戏资源(如图形、UI元素等)的基准分辨率。设计分辨率通常是一个固定值,游戏的所有资源都是基于这个分辨率进行创建和设计的。设计分辨率的选择对游戏的视觉效果和用户体验至关重要。
参考分辨率:参考分辨率是指在Canvas Scaler组件中设置的用于设计UI的目标分辨率。它代表了游戏UI在这个分辨率下的理想显示效果。Canvas Scaler会根据实际运行时的屏幕分辨率和参考分辨率的比例来缩放UI元素,以便在不同分辨率下尽可能保持一致的UI布局和外观。
高度适配:在高度适配时,游戏的UI元素和场景内容会根据屏幕的垂直高度进行调整。这意味着无论屏幕的宽高比如何,游戏的内容始终会填充整个屏幕的垂直空间,而水平方向可能会存在一些留白或被裁剪。
宽度适配:在宽度适配时,游戏的UI元素和场景内容会根据屏幕的水平宽度进行调整。这意味着无论屏幕的宽高比如何,游戏的内容始终会填充整个屏幕的水平空间,而垂直方向可能会存在一些留白或被裁剪。
Unity中相关设置
Canvas下的Canvas Scaler可以修改Reference Resolution(参考分辨率)。另外可以将Screen Match Mode设置为Match Width Or Height。代表可以进行宽度适配或者高度适配。宽度适配的话,将Match值设置为0,高度适配则是设置为1.

在Game栏可以设置实际显示的分辨率大小,可以通过该设置模拟各种分辨率的设备。

常见屏幕尺寸
下面是收集了市面上一些常见的设备以及极端长宽比设备的屏幕大小

iphoneX及以后的刘海屏设备,长宽比均为19.5比9(适配换算后为1560:720)。最长的设备是目前主流的安卓设备,长宽比是20:9(1600:720)。平板方面最宽的设备为4:3(1280:960)。
各种分辨率下的显示区域对比
下图绘制了常见机型的分辨率显示的区域。白色区域的分辨率为720*1280。红色的分辨率为720*1600,灰色区域的分辨率为720*1560,绿色区域的分辨率为960*1280。同时为了方便起见后文中均以720*1280(720P)为设计分辨率进行讨论和拆解。实际在开发过程中,可以根据项目的要求,选择更高或者更低的设计分辨率进行设计。比如画面要求高,并且面对高端设备的用户,可以采用1080*1920(1080P)的设计分辨率出图。

热门游戏的适配策略拆解
本次拆解,主要是参考了Royal Match和Monopoly GO!两款游戏,两款游戏分别在2024年1月全球热门移动游戏收入榜的2,3名。Royal Match的首次上线时间为2021年,Monopoly Go则为2023年,并且两款游戏均保持着较高的更新频率。通过拆解这两款游戏,可以大致了解当前欧美休闲厂商在UI适配上的策略,值得学习和借鉴。

RoyalMatch
UI部分
下面是对局部分的UI,左侧为720*1280右侧为720*1600。roy match的ui元素,都是在720*1280的分辨率下设计的。并且尽可能地充满整个屏幕。然后在屏幕高于1280的情况下,宽度适配,直接拉长背景。顶部和底部的UI都会贴边摆放。同时顶部UI会为刘海(挖孔)预留部分空间。

下图中左侧为720*1280,右侧为720*1560(iphonexs)。
UI元素同样是宽度适配。底部专门为iphone的Home Indicator保留了35个像素。

顶部UI则是保留了52个像素。

下图中左侧为iphone8p的截图,右侧为ipad mini6的截图,Ipad的适配则比较特别,经过缩放对比后发现,UI所在区域的大小为720*1496。底部为Home 导航额外预留了一块空间。底部UI的背景通过九宫格拉伸,宽度和高度均进行了缩放。但是按钮部分,还是按照720的宽度进行排布。并没有等间距摆放充满整个屏幕的宽度。由于ipad没有刘海,顶部UI直接贴顶边,同样也是在720的宽度内摆放.

背景图部分
下面左侧是720*1280(iphone 8p)的游戏内截图,右侧为720*1600的截图。通过缩放对比发现,右侧图片是左侧图直接等比缩放得到

下面的图则是ipad的背景缩放后与iphone 8p的图缩放后的对比。可以看到ipad的背景是要比720要更宽一些

最后通过解包royal match的资源后,找到图集中的实际背景图

实际的大小为1736*2894,换算后的比例为768*1280

monopoly go!
UI部分
下图中左侧为720*1280,右侧为720*1560(iphonexs),同样是采用了宽度适配的方式。顶部栏在布局的时候为刘海屏留出了47个像素

底部为Home Indicator保留了52个像素。同样是采用UI拉九宫格的方式填充空白部分

下面第一张图中左侧是840*1280(ipad mini)右侧是720*1280(iphone 8p)。pad使用了高度适配,宽度拉伸的方式。
顶部和底部UI贴边摆放。同时底部也为home导航额外预留了一块区域,整体UI有所上移。顶部栏使用了九宫的方式左右拉伸了。底部背景缩放后填充整个空白区域。不同于RoyalMatch只在720的宽度内摆放按钮。大富翁go的顶部和底部的按钮,都按照缩放后的宽度,在840的区域内摆放。底部UI元素均匀摆放,顶部UI贴边摆放。
|
|
|
背景图部分
从左到右的分辨率分别是840*1280(ipad mini6),720*1280(iphone8),720*1560(iphonexs),720*1600(iqoo neo 8pro)
对比之后,发现大富翁go应该是只用了一张720*1560的背景图。在pad上直接等比缩放。高度大于1560的设备,在刘海部分放置了一个黑条。Monopoly Go的标题则是单独切图,按照上面的UI适配规则放置在背景图上。

实际拆包后发现,使用的图片大小为487*1024.换算后为720*1513。通过底部UI填充的方式覆盖住1560的高度

总结
对比RoyalMatch和大富翁go。总结出以下几个共同点和不同的地方。在后续的UI设计中,可以参考他们的共同的部分进行资源的制作。不同部分的处理方式,需要与美术和产品沟通后,确定最后采用的策略。
共同点:
1.会根据设备的不同额外为刘海屏和Home导航预留部分空白区域,不会在该区域内摆放可以操作的UI。
2.顶部和底部的UI背景都会设计成可以进行九宫拉伸的背景。并且根据设备的不同填充空白区域。
3.UI的安全区域均为720*1280,确保了目前市面上最小设备能够完整展示UI。
4.在手机上,均采用宽度适配,高度拉伸的方式进行UI的摆放
不同点:
1.两个游戏为刘海屏和Home导航预留空白部分的像素不同。
2.在遇到比1560还要更长的设备时,royal match采用的是缩放背景图,填充空白区域的策略。大富翁go则是在顶部放置一个黑条覆盖空白区域
3.在ipad上大富翁go依旧是按照720*1280的分辨率,通过高度适配宽度拉伸的方式摆放UI。Royal match的设计分辨率则产生了改变,猜测是在720*1496的分辨率下进行高度适配。
4.大富翁go的全屏背景只使用了一张720*1560的图,然后根据设别不同进行等比例缩放。Royal match则是使用768*1280的背景,然后再进行等比缩放。
5.Royal Match在横向摆放UI时,仅在720的宽度内进行摆放,并不考虑宽度大于720的情况。大富翁go在宽度大于720时,则是会根据设备的宽度均匀(或者贴边)摆放UI。
创作不易,如果觉得这篇文章对你有所帮助,可以动动小手,点个赞哈,ღ( ´・ᴗ・` )比心
相关文章:
Unity UI适配规则和对热门游戏适配策略的拆解
前言 本文会介绍一些关于UI适配的基础概念,并且统计了市面上常见的设备的分辨率的情况。同时通过拆解目前市面上较为成功的两款休闲游戏Royal Match和Monopoly GO(两款均为近期游戏付费榜前几的游戏),大致推断出他们的适配策略,以供学习和参…...
嵌入式学习day25 Linux
进程基本概念: 1.进程: 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息(根据CPU占用率排序&a…...
Oracle数据泵跨大版本迁移数据库
Oracle数据泵跨大版本迁移数据库 source库导出元数据传输dump和数据文件到target库target库导入数据库迁移后的工作 🦈场景:将测试环境中一台Oracle 11g数据库迁移到另一台新搭建的19c数据库中。 🤔分析:由于是跨数据库大版本&…...
如何在Win系统从零开始搭建Z-blog网站,并将本地博客发布到公网可访问
文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…...
sawForceDimensionSDK安装,sigma7+ros
force dimension的sdk中没有关于ros,借助开源的sawForceDimensionSDK实现对于数据的封装和可视化,方便后续使用 链接: GitHub - jhu-saw/sawForceDimensionSDK 具体步骤: 安装qt和ros,官网下载Force Dimension SDK …...
全量知识系统问题及SmartChat给出的答复 之3
Q8. 进一步,请展示如何使用这些技术来衡量、评估或适应不可避免的不匹配的知识汤问题的更进一步的全面代码。 为了处理不可避免的不匹配的知识汤问题,我们可以引入一些技术方法来衡量、评估或适应这种情况。 下是一个更进一步的全面代码示例࿰…...
【常用的 SVN 命令及简要示例】
常用的 SVN 命令及简要示例,供您参考: 检出代码: svn checkout https://svn.example.com/project/trunk提交修改: svn commit -m "Commit message"更新代码: svn update创建分支: svn copy https://svn.example.com/project/trunk \https://sv…...
ISP代理是什么?怎么用?
在跨境出海业务中,代理IP对于您的在线任务至关重要,尤其是对于那些运行多个帐户的人来说。为您的帐户选择正确类型的代理对于确保帐户安全非常重要,劣质的IP容易使账号遭受封号风险。IPFoxy的多种代理IP类型应用范围各有侧重,其中…...
微服务之qiankun主项目+子项目搭建
主项目使用history,子项目使用hash模式 1. 下载安装"qiankun": "^2.10.13"2. 手动调用qiankun,使用vue脚手架搭建的项目1. 主项目配置(我使用的是手动调用乾坤,在指定页面显示内容)1. 要使用的页面中引入乾坤…...
双非二本找实习前的准备day2
学习目标: 每天2-3到简单sql(刷完即止),每天复习代码随想录上的题目3道算法(时间充足可以继续),背诵的八股的问题也在这里记录了 今日碎碎念: SQL有些题用到的知识感觉不会出现在…...
快速搭建宠物医院服务小程序的步骤,无需编程经验
如果你是一家宠物医院或者宠物服务机构,想要拥有一款方便用户预约、查询信息的小程序,那么乔拓云网提供的轻应用小程序是你的不二选择。下面将为你详细介绍如何轻松打造宠物医院服务小程序。 1. 进入乔拓云网后台,点击【轻应用小程序】中的【…...
从0开始python学习-53.python中flask创建简单接口
目录 1. 创建一个简单的请求,没有写方法时默认为get 2. 创建一个get请求 3. 创建一个post请求,默认可以使用params和表单传参 4. 带有参数的post请求 1. 创建一个简单的请求,没有写方法时默认为get from flask import Flask, request# 初始化一个flask的对象 ap…...
如何怎麼搭建高效的爬蟲全球代理IP池?
爬蟲技術可以幫助我們從各類網站上獲取大量的數據資訊,但常常會遇到IP被封鎖的問題,這就是我們需要搭建全球代理IP池的原因。那麼,如何搭建一個高效的IP代理池呢? IP代理池指什麼? 首先,我們需要明白什麼是…...
FinalShell连接Linux
远程连接linux 我们使用VMware可以得到Linux虚拟机,但是在/Mware中操作Linux的命令行页面不太方便,主要是: 内容的复制、粘贴跨越VMware不方便 文件的上传、下载跨越VMware不方便 不方便也就是和Linux系统的各类交互,跨越VMwar 到Linux操作系…...
数据分析Pandas专栏---第十一章<Pandas数据聚合与分组(1)>
前言: 数据聚合和分组操作是数据处理过程中不可或缺的一部分。它们允许我们根据特定的条件对数据进行分组,并对每个组进行聚合计算。这对于统计分析、汇总数据以及生成报告和可视化非常有用。无论是市场营销数据分析、销售业绩评估还是金融数据建模,数据…...
【Linux】将程序的输出显示到屏幕,同时写入到log文件
1. 将程序的输出显示到屏幕,同时写入到log文件 nohup python -u main.py 2>&1 | tee -a log.txt &nohup 放在命令的开头,表示不挂起(no hang up),也即,关闭终端或者退出某个账号,进…...
MySQL(基础篇)——函数、约束
一.函数 1.定义 函数是指一段可以直接被另一段程序调用的程序或代码。 2.字符串函数 常见如下: -- 字符串拼接 SELECT CONCAT(hello,MySql) AS CONCAT -- 将字符串全部转为小写 SELECT LOWER(HEllo MYSql) AS LOWER -- 将字符串全部转为大写 SELECT UPPER(Hello…...
【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现
1,视频地址 【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现 2,演示效果 启动先是报500 错误&#…...
八股文打卡day24——数据库(1)
面试题:左连接和右连接的区别? 我的回答: 左连接的SQL语句是:左表 left join 右表 on 连接条件,表示以左表为基础,将左表的的所有记录与右表进行连接。即使右表中没有与左表匹配的记录,左连接…...
robots.txt 文件规则
robots.txt 是一种用于网站根目录的文本文件,其主要目的在于指示网络爬虫(web crawlers)和其他网页机器人(bots)哪些页面可以抓取,以及哪些页面不应该被抓取。可以看作是网站和搜索引擎机器人之间的一个协议…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...


