目前安卓手机的屏幕大小各异,没有统一的标准,因此用Unity 3D制作的手游需要做好对不同分辨率屏幕的UI自适应,否则就会出现UI大小不一和位置错位等问题。

我们的项目在开发时的参照分辨率(Reference Resolution )设置的是主流的1920*1080,我们通过Unity提供的Canvas Scaler组件实现UI对不同分辨率屏幕的自适应。

1.将Canvas Scaler的UI Scale Mode属性设置成Constant Pixel Size

2.对Canvas下的子对象设定锚点

以下图中Canvas的子对象Panel-Repository为例

我们在inspector面板中将Panel-Repository这一UI组件的锚点定在左下角,这样Panel-Repository就相对于画布canvas左下角不动,从而使该UI组件随屏幕调整时不会超出Canvas左下角

设置好锚点之后可以看下UI在不同分辨率屏幕下的效果

1920*1080 (参照分辨率)下:

2960*1440:

本项目中UI组件可按锚点可划分成4部分,分别对应画布canvas的四个角:

  • 以画布左下角为锚点的两个面板和一个按键

  • 以画布左上角为锚点的文本

  • 以画布右上角为锚点的设置键

  • 以画布右下角为锚点的面板和两个按键

可以看出各UI组件是相对于锚点不动

1560*720:

因为屏幕(canvas大小同屏幕大小相等)的高度从1080变为720,导致部分UI组件超出了画布范围

但是可看出四部分相对于各自的锚点仍是不变的(锚点在左上角的text因为UI层级关系被遮挡,锚点在右上角的橙色按键并未超出canvas右上角)

3.调节Canvas Scaler组件的Scale Factor数值

调节scale Factor有什么效果呢?请看动图:

可见,Scale Factor可以帮助我们调整UI组件在canvas里边的显示大小。在不同分辨率的屏幕下,可以编写脚本,在场景初始化时按照\(\frac{当前分辨率的高度}{参照分辨率的高度}\)设置scale Factor数值

需要注意的是,Scale Factor其实并未改变UI各组件的size(inspector里的width和height),而是调整了canvas的size。

在上述项目中,当屏幕大小是1560*720时,

  • 未加载游戏场景以前,canvas默认等于屏幕大小,即1560*720;加载游戏场景后,canvas大小变为\(\frac{1560}{scale\ Factor} * \frac{720}{scale Factor}\) = 2340 * 1080.

  • 此后Unity会自动将2340*1080的画布映射到1560*720的屏幕上

    因此需要注意,在获取UI组件在canvas里边的坐标时,需要将触屏按压或者鼠标移动等事件获取的屏幕坐标除以scale Factor,做一个简单的映射。

至此,UI的自适应功能成功搞定。

Unity 3D手游对不同分辨率屏幕的UI自适应的更多相关文章

  1. 【HMC Core 6.0全球上线】图形计算服务新插件,助力高画质3D手游创新

    HMS Core 6.0已于7月15日全球上线,本次新版本向广大开发者开放了众多全新能力与技术.其中华为图形计算服务(CG Kit)开放了体积雾插件和流体插件,为3D手游画面的提升提供了坚实的技术基础 ...

  2. 出售一套Unity ARPG手游源码

    项目已经上线,在越南App Store曾经排名第一.客户端Unity C#开发,Android可以热更新,IOS可以更新资源,服务器 C++ + lua开发,文档齐全,欢迎咨询. QQ:7734952 ...

  3. 完美世界3D格斗手游[格斗宝贝]今日公測

    狗刨学习网报道 / 经过近两年井喷式的发展,国内手游市场洗牌的信号愈加强烈.用户体验的提升.以及对产品核心品质的要求.促进了手游的精品化.而白热化的市场竞争,也催生了各大厂商在细分市场的抢滩.当中.更 ...

  4. 发个招聘贴,魔都求手游C++后端,UNITY前端,开发实习生

    上海游旺网络科技有限公司成立于2015年5月,是一家极具潜力的新创移动游戏公司.公司初创团队均来自腾讯,盛大,畅游,墨麟,蜗牛等知名互联网公司,公司创始人团队参与制作过<鬼吹灯><Q ...

  5. Unity手游引擎安全解析及实践

    近日,由Unity主办的"Unity技术开放日"在广州成功举办,网易移动安全技术专家卓辉作为特邀嘉宾同现场400名游戏开发者分享了网易在手游安全所积累的经验.当下,很多手游背后都存 ...

  6. Unity手游之路<七>角色控制器

    Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...

  7. Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发

    http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...

  8. Unity手游之路<八>自动寻路Navmesh之入门

    http://blog.csdn.net/janeky/article/details/17457533 在的大部分mmo游戏都有了自动寻路功能.点击场景上的一个位置,角色就会自动寻路过去.中间可能会 ...

  9. Unity手游之路<十三>手游代码更新策略探讨

    http://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中 ...

随机推荐

  1. noip模拟21

    开题发现这场考过,定睛一看,发现是省选前最后一场,没改过呀--但是还是讲武德的赛时没提交 A. Median 神奇之处在于 \(1e7\) 个质数居然能线性筛出来~ 那么 \(S2\) 可以直接筛出来 ...

  2. java版gRPC实战之一:用proto生成代码

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. adb 常用命令大全(4)- 应用管理

    查看应用列表 语法格式 adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER] ...

  4. junit5 yaml和json 数据驱动

    使用yaml 数据驱动测试 新建用例数据类,用于动态修改测试数据 对应yaml文件,第一层结构为列表 第二层结构为具体序列化class对象 测试成功 public class TestYaml { @ ...

  5. uni-app 登录Abp VNexe并获取Token

    uni.request方式登录abp关键代码如下,因abp获取token需要用formdata方式请求所以需要加上请求头 const baseUrl = 'http://127.0.0.1:44323 ...

  6. GridControl常用操作

    显示分组面板 gridView1.OptionsView.ShowGroupPanel = true; 是否开启多选 gridView1.OptionsSelection.MultiSelect = ...

  7. Python - 虚拟环境 venv

    什么是虚拟环境 这是 Python 3.3 的新特性:https://www.python.org/dev/peps/pep-0405/ 假设自己电脑主机的 Python 环境称为系统环境,而默认情况 ...

  8. 多选Combobox的实现(适合MVVM模式)

    MVVM没有.cs后台逻辑,一般依靠command驱动逻辑及通过binding(vm层的属性)来显示前端 我的数据类Student有三个属性int StuId ,string StuName ,boo ...

  9. 学习PDO中的错误与错误处理模式

    在 PDO 的学习过程中,我们经常会在使用事务的时候加上 try...catch 来进行事务的回滚操作,但是大家有没有注意到默认情况下 PDO 是如何处理错误语句导致的数据库操作失败问题呢?今天,我们 ...

  10. PHP怎么遍历对象?

    对于php来说,foreach是非常方便好用的一个语法,几乎对于每一个PHPer它都是日常接触最多的请求之一.那么对象是否能通过foreach来遍历呢? 答案是肯定的,但是有个条件,那就是对象的遍历只 ...