Unity多屏幕下分辨率会自适配吗?

2021-04-21 17:40发布

7条回答
小磊子
2楼 · 2021-04-21 21:06

最近在学习UGUI,在学习UGUI当中的屏幕自适应的时候出现了问题,搞的我很头疼,于是在网上查了很多资料,花了一晚上的时间,其实当时还是没想明白,但夜里突然失眠了,于是想了想昨天晚上看的资料,突然灵光一闪好像明白了点什么,为了方便以后的查阅,因此也就有了这篇文章。好了咱们废话不多说 ~

想要明白UGUI的屏幕自适应(多分配率适配)首先你要明白:Canvas和锚点有什么区别?因为在进行适配的时候,只有搞明白这两个东西,才能真正的实现适配,否则很容易乱套。

一、首先我们先搞明白Canvas(实际上就是所支持的设备屏幕,调节Game视图里面的分辨率就是调节Canvas的大小,也就是选择所支持的设备屏幕大小):确切的说是搞明白Canvas当中一个属性Match:

此时我们需要把UI Scale Mode选为Scale With Screen Size(缩放根据屏幕尺寸),并且Screen Match Mode选为Match Width Or Height(匹配根据宽度还是高度),这样我们才能看到它。这里如果我们把Match当中的滑条滑到最左边,也就是根据宽度进行屏幕自适应(一般用于横屏的屏幕),你如果去挤压或者扩大屏幕的宽度的话,虽然宽度会改变,但是高度也会随着宽度保持刚开始的比例改变,所以整体的效果还是没变化,如下图所示:

初始屏幕挤压屏幕扩大屏幕

拉到最右边跟最左边同理,会根据高度进行屏幕自适应(一般用于竖屏的屏幕),保持刚开始的比例;如果拉到中间的话,宽高都会进行屏幕自适应,这里我就不太清楚了,这个地方的应用场景不太了解,在下也刚刚接触没多久~咱们这里的操作都是对画布(Canvas)的操作,让画布实现屏幕自适应,而其他的东西都要在画布当中显示,所以这对于后面的操作很重要,否则就要前功尽弃了。

二、其次我们要搞明白锚点(Anchors),如下图:

锚点

AnchorsMin:锚框左下角的点

AnchorsMax:锚框右上角的点

AnchorsMin和AnchorsMax中的x、y都是归一化的值,归一化就是说他们的取值范围是[0,1],这个归一化的比例是跟父物体的大小匹配的,如果没有父物体就是跟画布大小匹配的

AnchorsMin和AnchorsMax

其实准确的说Anchors是锚框,锚点只是锚框的特殊情况

这里我们方便描述,设置了两张图片,黑框和红框,黑框设为红框的父物体,如图:

参考图

这里讲一下,当一个对象有父物体的时候,锚框会以父物体为锚框的活动区域;如果这个对象没有父物体的时候,画布就默认是它的父物体,画布就是它的活动区域

当AnchorsMin和AnchorsMax不在同一水平线或垂直线上的时候,就形成了锚框;当AnchorsMin和AnchorsMax两个点重合的时候,就形成了一种特殊情况:锚点

锚点

这里讲一下Rect Transform中的custom:

可以控制锚点(红色框的)、锚框(黄色框的)、子物体本身注册点位置(按住Shift会出现)、子物体占父物体的位置(按住Alt会出现),如图:

90

这里要讲一下注册点(Pivot):注册点就是自身的中心点,也是个归一化的点

注册点

情况一:当是锚点的时候,使用的是绝对位置,定在父物体身上的锚点到子物体身上的注册点的距离不会改变,子物体的大小也不会改变。我们现在改变屏幕的分辨率,你会发现画布左下角锚点的位置和黑框注册点的位置之间的距离不会改变,如图:

分辨率为19200*10的时候分辨率为1024*768的时候

你也可以拖动黑框,会发现虽然父物体黑框大小改变了,但是子物体红框定在父物体黑框身上的锚点到子物体红框身上的注册点(Pivot)的距离并没有改变,如图:

拖动前拖动后

总结一下:当使用的是锚点的时候,使用的是绝对位置,被子物体定上锚点的父物体的大小改变、移动都不会改变子物体锁定的锚点到子物体注册点(Pivot)之间的距离。

情况二:当是锚框的时候,使用的是相对位置,你会发现,定在父物体身上的锚框左下角的点(AnchorsMin)到子物体身上的左下角的点距离不会改变,锚框右上角的点(AnchorsMax)到子物体身上的右上角距离不会改变。我们现在移动黑框,发现红框会跟着黑框一起移动,但是AnchorsMin到红框左下角点的距离,以及AnchorsMax到红框右上角点的距离并没有发生改变,如图:

拖动前拖动后

总结一下:当使用的是锚框的时候,使用的是相对位置(相对父物体的位置),被子物体定上锚框的父物体的移动不会改变子物体锁定的锚框的AnchorsMin到子物体左下角点之间的距离以及锚框的AnchorsMax到子物体右上角点之间的距离。



20200921文 - 做更棒的自己!
3楼 · 2021-04-22 08:49

PC固定分辨率即可 1280*768也可作自适应,按照1280*768的标准做,然后自适应其他分辨率即可。

老杜
4楼 · 2021-04-22 14:51

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

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


Transform
5楼 · 2021-04-22 17:51

可以在建立UI画布的时候选择scale with screen size ,这样就可以实现自适应了。

梅向南
6楼 · 2021-04-22 18:41

pc下回的,但是到处到APK需要自己调整自适应。

熊晓燕
7楼 · 2021-04-26 00:14

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

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


蜗牛
8楼 · 2021-05-14 12:01

PC可以自适应但是安卓不行,需要通过一些手段设置屏幕适配,比如说调节Canvas的Scale With Screen Size,以及锚点

相关问题推荐

  • 回答 6

    第一步:对着Assets点击右键,选择ExportPackage第二步:选择场景文件以及和场景相关的资源或者素材,然后点击Export第三步:给导出的资源取名,并且选择要保存的位置即可

  • 回答 87
    已采纳

    玩游戏玩的很好,说明你对于游戏里面的规则、剧情设置还是比较了解的,对于从事游戏相关岗位来说也是优势之一。但是学习游戏开发还是要对游戏开发的工作内容做进一步的了解,游戏开发涉及代码较多,可以通过进一步的了解,判断自己是否适合学习这个方向,另外...

  • 回答 11

    游戏开发入门不难。后期发展需要你有丰富的奇思妙想。游戏开发肯定是培训好,自学学得不系统,并且不易发现自身薄弱之处。游戏开发的学习时长还是要看你自己对知识与技术的掌握能力,一般来说,游戏开发的学习时长大约在五个月左右。...

  • 回答 18

    个人觉得如果有一定的技术基础的话还是可以考虑自学,如果零基础的话可能会有些难度

  • 回答 10

    问题还是出在粒子的sorting fudge。在unity的2d模式下,游戏本身的背景相当于是sorting fudge的0,当你把粒子的sorting fudge设为0以上的时候,粒子就都会被背景盖住。所以在3d模式下给alpha正值来给add垫底的话,到了2d模式下就会通通不显示。所以遇上这样的...

  • 回答 17

    虚幻4引擎,你会看到和平精英加载页面左下角有这个图标。

  • 回答 8
    已采纳

    转载知乎上的两位答友的回答,各有道理。作者:风小锐链接:https://www.zhihu.com/question/322249959/answer/675883379来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。未来Unity有可能出现3A大作吗? 有可能。基于Unity已...

  • 回答 11

    在Assets文件夹里面.点击右键Create/Material即可以创建材质球

  • 回答 23

    可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...

  • 回答 18

    粒子系统由粒子发射器、粒子动画器和粒子渲染器三部分组成,主要用于游戏场景中一些特殊效果,如水、烟火等等

  • 回答 18

    首先,Python开发游戏非常尴尬,原因是没有好用的游戏开发库。Python开发游戏仅推荐PyGame,PyGame是对多年以前很流行的游戏开发库——SDL的封装。但是说实话功能太简陋了,做个动画都得考虑刷新的问题。楼主要做简单小游戏,只需要画一两周熟悉Unity引擎,然...

  • 回答 9

    1.标记水体碰撞的位置2.计算水波的传递 通过波动公式,3D或者2D 波动公式都行3.水面顶点采样波动传递结果计算结果做顶点Y轴偏移

  • 回答 15

    Unity3D中两种阴影的实现传统的ShadowMapShadowMap说起来十分简单,把摄像机和光源的位置重叠,那么场景中该光源的阴影区域就是那些摄像机看不到的地方,主要应用在前向渲染路径中。具体实现分以下几个步骤:如果有平行光开启了阴影,Unity就会为该光源计算它...

  • 回答 18

    Doozy UI是Unity UI视图层的框架,本身使用的还是UGUI的组件,但提供了一套强大的UI管理功能,可以很方便的实现一些炫酷效果,方便的UI系统管理与事件传递机制。

  • 回答 12

    Unity3d更好,因为U3D占有的市场更大,目前cocos大都是用来开发棋牌游戏的,在这方面它有着巨大的优势。而Unity3d既可以用来开发大型3D游戏,也可以用来开发vr游戏、vr应用,这是比较不错的,未来有着巨大的前景。另外ue4也是个不错的选择,近年来用ue4开发的...

  • 回答 11

    当Unity 需要做热更新的时候(2013年开始),而普通的C#又做不到的时候,而对于游戏行业来说Lua脚本热更新已经是很成熟的方案,自然Lua 热更新就成为了Unity热更新的首选。

没有解决我的问题,去提问