位置: 编程技术 - 正文

一种Unity2D多分辨率屏幕适配方案(unity2d ui)

编辑:rootadmin

推荐整理分享一种Unity2D多分辨率屏幕适配方案(unity2d ui),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity l2d,unity 2d,unity2dshader,unity l2d,unity^2,unity可以做2d吗,unity可以做2d吗,unity做2d游戏怎么样,内容如对您有帮助,希望把文章链接给更多的朋友!

先说明一些基本的概念:

1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕高度

2.Unity2D中摄像机镜头的尺寸决定了我们实际看到游戏内容的多少,在编辑器中我们可以通过调整摄像机Camera的orthographicSize属性&#;来调整摄像机的大小。如下图所示,当摄像机orthographicSize属性&#;等于当前屏幕高度单位的一半时,摄像机大小正好与屏幕大小相等。注意这里提到的是屏幕单位高度的一半,这个数&#;是经过像素到单位比即Pixels To Units换算的,Unity2D中这个比例的默认&#;是,即像素等于1单位。如果我们的游戏屏幕有像素高,那么实际换算成单位高度则是6.4个单位,当我们摄像机的orthographicSize&#;是3.2时,摄像机大小刚好与屏幕大小相等。

(可以通过此选项调整每张图片的像素单位比)

看到这里你可能会发出疑问,Unity编辑器中只能直接调整摄像机的高度,那摄像机的宽度是如何确定的呢?答案就是我们最前面提到的屏幕宽高比。Unity会根据当前屏幕实际的宽高比和摄像机的orthographicSize&#;来计算出摄像机的宽度&#;,即:

摄像机实际宽度 = 摄像机orthographicSize * 2 * 屏幕宽高比

也即是

摄像机实际宽度 = 摄像机高度 * 屏幕宽高比

我举个例子说明一下,iPhone4的屏幕像素为*,宽高比为2:3,假设Pixels To Units&#;为,那么如果设摄像机高度size&#;为4.8,那么摄像机实际宽度按照公式算出6.4,刚好就是屏幕的单位宽度。

---------------------------------------渐入佳境的分割线------------------------------------------

好了,讲了以上的东西我们就知道为何我们的游戏会在不同的屏幕分辨率的设备上有不同的显示了。

不同的屏幕分辨率,相同的摄像机orthographicSize&#;会产生不同的摄像机尺寸,不同的摄像机尺寸导致实际显示的游戏内容的不同。

接下来我再提出两个概念,为了方便后文的说明:

1.游戏有效内容,指游戏中一定需要完整显示在屏幕上的内容;

2.游戏实际内容,指全部的游戏内容,包括有效内容和主要是为了适配多分辨率的或其他不重要的目的而增加的内容。

我们的开发一般都会选择在一个固定的设计分辨率上进行,比如常用的iOS竖屏游戏设计分辨率*,我们就以这个设计分辨率为例。通常情况下,设计分辨率尺寸就是我们游戏有效内容的尺寸。

采用这个分辨率,我们将摄像机的orthographicSize&#;设为4.8。假设我们不做任何多分辨率的适配处理,使我们游戏的有效内容区域和实际内容区域尺寸相同,都为6.4*9.6(已经做过像素到单位的换算,下同),让这个游戏运行在一款iPhone5设备上(即屏幕是*)时,我们来看看会发生什么情况。

为了更好的说明,我们先设变量:

接着开始计算:

根据计算,我们得到实际摄像机的宽度为5.4,而游戏有效内容宽度是6.4,摄像机宽度小于游戏有效内容宽度,即cameraSize.width < gameValidContentSize.width = gameContentSize.width,这时游戏内容被摄像机裁减!一种Unity2D多分辨率屏幕适配方案(unity2d ui)

以下以我做的一个小游戏为例子,我们可以更清楚的看到这个问题:

第一张是在*的设备上运行时的效果,一切正常。第二张是在*的设备上运行的效果,可以看到游戏内容被剪得很明显,右上角的按钮都快没有了。

如何解决这个问题呢?最直接的想法是,如果我们的游戏在*屏幕的设备上,摄像机宽度依然保持是6.4,那肯定就不会剪切了。为了做到这一点,我们必须在运行时来调整camera的orthographicSize&#;。方法很简单,还是套用上面讲到的公式:

我们再一次运行游戏,动态修改camera的orthographicSize&#;为5.,可以看到:

宽的方面是完全显示出来了,可是上下都出现了的“黑边”(这里是蓝边,呵呵)。这是因为摄像机的高度已经大于了游戏内容的高度,所以自然会出现没有内容的区域,即“黑边”。为了解决这个问题,我们就需要给游戏增加上下边,直接上和黑边同尺寸的图是一种方法,但是还有一种更简易的办法,直接将游戏背景放大一些,以盖住黑边!这个游戏比较简单,我们就用这个简易的方法,我们将游戏背景放大到1.3倍,如下图:

OK!现在我们的游戏看起来已经很正常了,已经完成了iPhone5的适配。

注意到这个时候我们游戏的有效内容区域已经不等于实际内容区域了,我们放大了背景图片,实际上等于为游戏增加了一层外边缘。如图,在白框内部的就是有效内容区域,在白框外部的就是无效内容区域。整体实际游戏内容区域已经大于了有效内容区域。

-----------------------------------------最终结论的分割线------------------------------------------

根据以上解决分辨率问题的过程,我们可以得出,实际的分辨率适配问题与三个尺寸相关,他们分别是:摄像机尺寸,游戏内容尺寸(包括有效内容尺寸和无效内容尺寸)和实际屏幕尺寸。为了能够显示我们需要的有效内容,并且不显示黑边,我们必须要保证:

摄像机的尺寸既必须要小于或等于游戏实际内容尺寸,又必须要大于或等于游戏有效内容尺寸。如下图,蓝色的线框表示摄像机的尺寸,我们即只要保证蓝色框在白框外,在图内就能保证游戏内容的显示正确。

只要能够确保以上这一点,那么我们的游戏就能够应对几乎所有的屏幕分辨率。

按照这种方案,说到底,解决屏幕分辨率适配的问题,其实就是解决如何让游戏摄像机尺寸限定在给定范围的问题。

总结起来,步骤就是:首先,需要确定游戏的有效内容区域和实际内容区域;然后,游戏启动时,根据实际的屏幕宽高比将你的摄像机尺寸调整到合适你游戏的大小即可。

-----------------------------------------最后的分割线------------------------------------------

最近写了很多小游戏,用这个方案一劳永逸地解决了多分辨率适配特别是Android设备适配的问题。这种方法的好处一方面是只要理解了,操作起来很简单,另外一方面不同于缩放游戏内容的方案,这种方法保证了游戏内容的原汁原味。当然,缺点可能也是有的,暂时能想到的可能是对于一些需要依赖摄像机做效果或者操作的游戏,改变摄像机的大小可能会造成一些影响。目前这方面经验还比较少,希望以后可以不断地完善这个方案。

最后上一下自己写的一段简单的调整orthographicSize&#;的脚本,用于保证camera的width&#;不会小于游戏有效内容宽度,有效内容尺寸为6.4*9.6。这个脚本只要附加在游戏的Camera上就可以生效。

Unity3D Vuforia Android 相机调焦 /*==============================================================================*Copyright(c)-QualcommConnectedExperiences,Inc.AllRightsReserved.*==============================================

Windbg调试Unity3d 卡死 无响应等问题测试 如果你平时玩转u3d,却没有碰到过一些奇怪的bug,导致u3d无响应,那么你是幸运的。引起u3d卡死的bug是非常恶心的一件事。首先你无法获得任何引起bug的

学习Unity3D Shader篇 - 从GLSL到Unity3D Shader(一) 一直在用OpenGLGLSL开发,也用过Unity3D自己开发过一些小玩意。但是一直涉及过U3D的Shader方面。今天开始,有时间就要学习一下。如果有GLSL的开发经验,

标签: unity2d ui

本文链接地址:https://www.jiuchutong.com/biancheng/378855.html 转载请保留说明!

上一篇:unity优化的一些建议(代码+文字)(unity 优化)

下一篇:Unity3D Vuforia Android 相机调焦

  • 利润表中的所得税
  • 兼职人员工资需要申报个税吗
  • 小规模纳税人可以开数电专票吗
  • 收到工程服务费会计分录
  • 投资性房地产转为非投资性房地产
  • 财务月末结转成什么账户
  • 出售报废固定资产属于什么收入
  • 汇总记账凭证会计核算组织形式适用于
  • 已付款已收货但发票未到账务处理怎么做
  • 化肥贸易需要什么手续
  • 企业采购材料没有发票是要交企业所得税吗
  • 红字通知单进项税额转出
  • 案例分析小规模纳税人月销售不足3万如何处理?
  • 劳动保护费在企业怎么交
  • 企业完税凭证入账后怎么办理退税?
  • 小微企业季度所得税怎么计算
  • 母子公司之间转让房产
  • 一般纳税人交的增值税可以抵扣吗
  • 外经证金额没开完需要核销吗
  • 下列各项支出中,允许用现金支付的有
  • 职工教育扣除标准是什么
  • 月末进项税额结转会计分录
  • 投资类公司增资
  • 不良品退回处理流程
  • 代扣代缴返还的手续费科目
  • 建筑业总产值的统计执法检查内容
  • 净资产有哪些科目
  • kindeditor vue
  • PHP+Mysql+jQuery中国地图区域数据统计实例讲解
  • 员工伙食费明细表
  • springboot集成camunda+bpmn
  • PHP:mb_http_output()的用法_mbstring函数
  • php url编码转换
  • mediacache是什么文件夹
  • 十大网页游戏
  • 企业股权投资收益缴纳什么税
  • 担保公司未到期责任准备金会计及税务处理案例
  • 按实际成本结转6日和7日的材料采购成本
  • 小微企业延缓缴纳
  • php 字符串处理函数
  • 阿里巴巴php
  • 本月损益类未结转为零的一级科目
  • 微信支付高速通行费怎么开电子发票
  • java泛型方法的作用
  • python怎么设置窗口界面
  • 小企业会计准则主要按照什么计量
  • 支付土地补偿款计入什么科目
  • sql如何查询某个表的列名
  • 企业哪些进项税不能抵扣
  • 合伙企业可以退出吗
  • 公租房特许经营权转让
  • 拆迁补偿款收税吗
  • 住宿费开的增值税专用发票怎么记账
  • 企业代办业务有哪些
  • 生产线计提折旧是否会减少现金流
  • 银行承兑汇票去哪个银行承兑
  • 购入固定资产预计净残值
  • 原股东决定
  • 餐饮行业招聘方案
  • mac下mysql密码忘记了怎么办
  • 流言:Win9或终止32位系统 加速64位平台
  • 电脑的技巧
  • ubuntu如何创建文件
  • m1 macbook压缩能力
  • Win10预览版镜像
  • centos pptpd
  • onekey.exe是什么
  • 紧跟潮流的句子
  • win8谷歌浏览器出现无法访问此网站
  • win10安装驱动器
  • 3d网络游戏开发方法
  • opengl常用函数库
  • vue中拦截器
  • 深入解析抑郁症:什么是它的表现?别小看它的危害程度!
  • jquery显示图片
  • python爬取三国演义前六章
  • 点评js异步加载什么意思
  • 设计合同需要备案吗
  • 美团上满30减12的券在哪啊
  • 防疫物资开票免税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设