Unity3D】【UGUI基础】UGUI屏幕如何适配?

2020-12-11 10:25发布

8条回答

1、Canvas选择一定的分辨率,比如手机横屏通常选择1344*750。
2、UI Scale Mode,UI缩放模式,有三种模式

  • Constant Pixel Size时,UI在任何分辨率下都不会进行缩放拉伸,只有通过改变Scale Factor才会进行缩拉,因此不推荐使用该模式(而这种模式的优点就是你可以通过写自适应算法来改变Scale Factor的值,代替unity的自适应算法)。

  • Scale With Screen Size 使用unity的自适应算法,此时unity会根据屏幕分辨率自动调节Scale Factor的值

  • Constant Physical Size 按照实际物理尺寸显示,这种模式比较少用
    3、Screen Match Mode,UI屏幕适应模式,也有三种模式

  • Match Width Or Height 适应高度或者宽度
    当值为0即处于Width那端时,表示屏幕高度对于UI大小完全没有任何影响,只有宽度会对UI大小产生影响。
    同理当值为1即处于Height那端时,表示屏幕宽度对于UI大小完全没有任何影响,只有高度会对UI大小产生影响。
    通常情况下,横屏游戏选择1,竖屏游戏选择0,正方形屏幕游戏可以选择0.5

  • Expand    伸展模式
    设计了一个button宽高为200*100,即宽高比为2:1,放在4:3的屏幕内;然后把这个button放在16:9的屏幕内,显然地,此时button是不能进行等比例的缩放的,即无法保持2:1的宽高比了,Expand的意思就是尽可能地使UI拉伸来适应屏幕。

  • Shrink 裁切模式
    在尽量适应的情况下,多出屏幕的部分不显示。
    4、在game面板选择与Canvas一样的分辨率,以便更好地查看实际效果。



是你的小甜心呀
3楼 · 2020-12-11 15:33

首先定义两个float的变量来接收屏幕的宽和高 higth高 width宽
在最开始的时候获取屏幕的宽和高 screen.height
定义一个RectTranform的对象 gh
再定义一个要适配物体的对象 red
在开始时找到适配物体的RectTranform组件并赋值给gh
使用一个二维向量,设定他的宽和高各站屏幕的几分之几
sizdelta是这个RectTransform的大小相对于锚点之间的距离。
把这个二维向量赋值给gh.sizdelta
再定义一个二维向量去接收这个图片的大小 fs
最后在设定位置使用anchoredPosition 用二维向量控制此RectTransform的枢轴相对于锚点引用的位置
写完后回到Unity,把对应的物体进行赋值,运行则可以出效果

梅向南
4楼 · 2020-12-11 19:10

UGUI屏幕适配原则

- 固定像素

忽略屏幕的大小根据UI元素的实际像素显示 ,像素大小始终不变,即一个100*100的图片在任何的分辨率下都占用100*100的像素。一般PC上会使用这种方式,因为PC端分辨率差异并不大。

- 根据屏幕大小进行缩放(也是最常用的一项)

此项会根据设备真实分辨率与设计分辨率来对Canvas进行缩放。有三种模式:

1.Match Width or Height

根据宽或者高来对Canvas进行缩放,比如设备分辨率为1920*900,设计分辨率为1280*720,此时,如果采用宽进行匹配那么可以通过公式计算出此时应该缩放多少倍,公式如下:

缩放因子:1920/1280 = 1.5

缩放后的Canvas的宽为:1920(刚好能够完全显示)

缩放后的Canvas的高为:720*1.5 = 1080

由于设备的高为900所以会导致高度上的一部分不会被显示出来

2.Expand

适配的计算公式同上,只是在此模式下会保证设计分辨率下的东西能够全部显示出来,及选择设备分辨率和设计分辨率的宽、高比中选择最小值作为缩放因子。

3.Shrink

和Expand恰好相反,在此模式下不会留黑边但是会导致显示不完全。及选择设备分辨率和设计分辨率的宽、高比中选择最大值作为缩放因子。

UiScaleMode一般选择Scale With Screen Size,并设置好设计分辨率。其他两个选项都是固定像素大小。

Screen Match Mode中一般选择Expand,它可以保证ui中的所有元素都在屏幕内部。 相对比的一个选项是Shrink,它可以保证不留空白边。

3、多分辨率的思路是Scaler中选择Expand保证所有ui元素在屏幕内部。少部分界面,如主界面、战斗界面等根据需要设置Anchors中的全屏拉伸。注意,这里的拉伸的含义仅仅是设置Panel的宽、高,并不影响子控件的缩放,但是会影响其布局。

- 固定物理大小

忽略屏幕大小和分辨率根据UI的实际物理大小来显示。


1234
5楼 · 2020-12-11 21:21

直接与屏幕适配相关.控制canvas下所有UI元素的缩放比例

UI Scale Mode缩放模式三种:

Constant Pixel Size:忽略屏幕大小,UI保持相同的像素大小.

Scale With Screen Size:根据屏幕大小,缩放UI.

Constant Physical Size:忽略屏幕大小及分辨率,UI保持相同的物理大小.


这里我们选择使用Scale With Screen Size模式.

Reference Resolution:表示我们设计的目标分辨率.

Screen Match Mode:选择Match Width Or Height,表示根据宽度或高度来缩放.

Mtch:表示缩放权重,0表示根据宽度,1表示根据高度,中间混合.


Transform
6楼 · 2020-12-14 10:30

1、Canvas选择一定的分辨率,比如手机横屏通常选择1344*750。
2、UI Scale Mode,UI缩放模式,有三种模式

  • Constant Pixel Size时,UI在任何分辨率下都不会进行缩放拉伸,只有通过改变Scale Factor才会进行缩拉,因此不推荐使用该模式(而这种模式的优点就是你可以通过写自适应算法来改变Scale Factor的值,代替unity的自适应算法)。

  • Scale With Screen Size 使用unity的自适应算法,此时unity会根据屏幕分辨率自动调节Scale Factor的值

  • Constant Physical Size 按照实际物理尺寸显示,这种模式比较少用
    3、Screen Match Mode,UI屏幕适应模式,也有三种模式

  • Match Width Or Height 适应高度或者宽度
    当值为0即处于Width那端时,表示屏幕高度对于UI大小完全没有任何影响,只有宽度会对UI大小产生影响。
    同理当值为1即处于Height那端时,表示屏幕宽度对于UI大小完全没有任何影响,只有高度会对UI大小产生影响。
    通常情况下,横屏游戏选择1,竖屏游戏选择0,正方形屏幕游戏可以选择0.5

  • Expand    伸展模式
    设计了一个button宽高为200*100,即宽高比为2:1,放在4:3的屏幕内;然后把这个button放在16:9的屏幕内,显然地,此时button是不能进行等比例的缩放的,即无法保持2:1的宽高比了,Expand的意思就是尽可能地使UI拉伸来适应屏幕。

  • Shrink 裁切模式
    在尽量适应的情况下,多出屏幕的部分不显示。
    4、在game面板选择与Canvas一样的分辨率,以便更好地查看实际效果。



摘自
链接:https://www.jianshu.com/p/6ab8467d77d1


可口可乐
7楼 · 2020-12-14 13:51

首先定义两个float的变量来接收屏幕的宽和高 higth高 width宽
在最开始的时候获取屏幕的宽和高 screen.height
定义一个RectTranform的对象 gh
再定义一个要适配物体的对象 red
在开始时找到适配物体的RectTranform组件并赋值给gh
使用一个二维向量,设定他的宽和高各站屏幕的几分之几
sizdelta是这个RectTransform的大小相对于锚点之间的距离。
把这个二维向量赋值给gh.sizdelta
再定义一个二维向量去接收这个图片的大小 fs
最后在设定位置使用anchoredPosition 用二维向量控制此RectTransform的枢轴相对于锚点引用的位置
写完后回到Unity,把对应的物体进行赋值,运行则可以出效果

Ross
8楼 · 2020-12-15 20:43
  1. 设置画布的缩放模式为按屏幕尺寸缩放;

  2. 设置一个基准分辨率;

  3. 设置为按宽高等比例缩放;

  4. 把控件放到合适的位置,然后把锚点的四个角分别放到控件对应的四个控制点上

相关问题推荐

  • 回答 17

    还是要学好编程基础呀如果你觉得编程很苦难 不一定要从c#开始学  学学js flash as等等  有个梯度就好多了如果要用好unity  不会编程那是不行的  学习的过程中都有个头疼的过程  记住  头越痛  代表你要接受的东西越多  坚持 你的大脑在和知识兼容中:D...

  • unity如何自学Unity3D 2022-01-06 15:24
    回答 18

    可以先思考学习的目的,是什么因素在驱动你。是完成一款作品?进入某个行业?还是探究某类问题?否则和技术相关的知识浩如烟海,很容易迷失在细枝末节上。而要找到动力源头。个人的经验,就是关注一些和自己同方向,同类型的创作者。他们输出的作品会激励你,...

  • 回答 23

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

  • 回答 2

    Shader Unlit/Test{Properties{_MainTex(MainTex,2D)=white{}_MainColor(MainColor,COLOR)=(1,1,1,1)_AddTex(AddTex,2D)=white{}_Maxset(Max,Range(0.1,1.0))=0.1}SubShader{Tags{RenderType=Transparent Queue=Tran...

  • 回答 4

    文章主要为大家详细介绍了Unity Shader实现水波纹效果,文中示例代码介绍的非常详细具体代码实现如下:Shader Custom/shuibowen{ Properties{ _MainTex(Base (RGB),2D)=white{} _distanceFactor(Distancefactor,float)=1 _timeFactor(time factor,float)=...

  • 回答 7

    策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样!    游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...

  • 回答 7
    已采纳

    可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。

  • 回答 3
    已采纳

    游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...

  • 回答 5

    void Update(){          transform.rotation = Quaternion.Euler(Vector3.zero);}可以试一下,保证物体x轴和z轴为0就可以使其一直垂直。

  • 回答 3

    界面左右移动、上下移动。。本质都是:手指滑动。。。可以参考这些:https://www.cnblogs.com/coldcode/p/5362537.htmlhttps://blog.csdn.net/totosj/article/details/80112852https://blog.csdn.net/zcc858079762/article/details/85253120...

  • 回答 6

    首先新建一个C#脚本,命名为MyFollow,然后把以下代码粘贴进去,保存:AخA 1using UnityEngine;2using System.Collections;3public class MyFollow : MonoBehaviour4{5    public float distanceAway = 5;          // distance...

  • 回答 5

    安装高通的Vuforia插件即可。

  • 回答 5

    不可以,只能一个工程打一个包。

  • 回答 2

    Edit->Project Settings->Graphics 找到Shader Stripping 中fog mode设置为custom(原来是Automatic),然后选中你想要的模式,最后重新打包就ok

  • 回答 2

    用到的插件:System.Drawing.dllSystem.Windows.Forms.dllSystem.Deployment.dll(运用基于.Net4.x的dll打包时,需要用到该dll,否则会报错)代码如下:using System;using System.Runtime.InteropServices;using UnityEngine;using UnityEngine.UI; p......

  • 回答 6

    如下图,设置为none,然后删掉滑动条就可以了。

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