Unity3d中UGUI组件精简复盘Canvas及其相关组件

Posted ProMer_Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d中UGUI组件精简复盘Canvas及其相关组件相关的知识,希望对你有一定的参考价值。

一、 Canvas组件

上一节,我们简单概括了Unity3D编辑器中RectTransform的相关属性简要介绍。具体详情链接为:Unity3d中UGUI组件精简复盘(一)RectTransform组件

1.canvas的三种渲染模式

所有的UI元素只有在Canvas下才能够正常显示

在这里插入图片描述

  • Screen Space - Overlay:UI元素始终在3D物体之上的

在这里插入图片描述

即便添加了一个Cube调至摄像机面前,Canvas一样在最上层显示

  • Screen Space - Camera:与摄像机关联,3D物体可以遮挡UI

在这里插入图片描述

当我们将摄像机拖至Render Camera

在这里插入图片描述

此时的Canvas的位置会跟摄像机的位置关联,画布的位置会调整是摄像机的渲染切面上。此时Canvas的位置可以通过调节Plane Distance的距离来实现。在这里插入图片描述

  • World Space:整个Canvas会作为一个3D物体来进行调节

可以对Canvas的位置进行调节,即属性位置可以进行调节

在这里插入图片描述

注意: Screen Space - Overlay模式与Screen Space - Camera模式下特有的属性:Pixel Perfect

  • Pixel Perfect:是否为了准确显示图片的像素关闭抗锯齿

例如:做了抗锯齿处理后,可能100像素的图片会被处理为101像素

如果有的图片要求特别高,需要关闭抗锯齿,此时勾选Pixel Perfect

  • Target Display:根据组件设置的Display 可以在Game中单独进行显示
    我们可以通过设置不同的DisPlay从而实现摄像机Game中显示的效果不同。
    具体如图:

在这里插入图片描述

在这里插入图片描述





二、UI单位和像素的对应关系

上面讲到讲到抗锯齿处理中,提及到了像素,这就不得不提一嘴UI单位与像素之间的对应关系了。首先我们了解一下Canvas Sacaler组件下的属性。


Canvas Sacaler组件
作用:控制界面的缩放,即控制的所有UI元素的缩放和像素,但不会直接作用于字体的大小或者图片的尺寸

  • Scale Factor: 调节缩放变量

假设 将Canvas下的Canvas Scacaler组件下的Scale Factor属性 设为0.5,渲染效果会缩放为原来的0.5倍,但是Image的图片大小(width、height)不会发生实际的改变。

  • Reference Pixels Per: 1Unity单位对应b个像素

  • Pixels Per Unity: 多少像素对应1Unity单位

例如图:

在这里插入图片描述
<该素材图片来自于网上>

三、Canvas Scaler下的三种适配方案

1. ConstantPixelSize模式下的UI适配

  • ConstantPixelSize:显示屏幕会根据屏幕的大小来自动变,但是UI的元素的大小是不会变的

这种情况下,会出现以下情况,当在1920*1080尺寸下,UI布局如果为这样
在这里插入图片描述

在不进行适配调整的情况下,当尺寸调整为1080*720,UI布局效果如下:

会出现上面的白色面板 遮挡住了中心的 棕色面板,因此需要进行适配

在这里插入图片描述

UI适配的方法,就是通过Canvas里的Scale Factor 来进行控制,因为constant Pixel Size 模式下,显示屏幕会根据屏幕的大小来实现自动适配。
在这里插入图片描述

因此,我们可以通过代码控制Canvas Scaler 里的Scale Factor 来进行实现:

eg.TestConstantScaler

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestConstantScaler: MonoBehaviour {

	// Use this for initialization
	void Start () {
        float wScale = Screen.width / 1920.0f;
        float hScale = Screen.height / 1080.0f;
        //第一种模式下进行的UI适配的操作
        GetComponent<CanvasScaler>().scaleFactor = wScale;
	}

}

运行过程呢,当获取到当前屏幕为1080*720时,则会计算出相应的缩放比,赋值给sacleFactor,从而实现跟1920 *1080一样的UI布局效果。

在这里插入图片描述
说到这就不得不提一嘴博主工作中的经历,起初博主在工作期间,也是第一次遇到关于屏幕分辨率适配的问题。当时博主也觉得这个问题就是一个适配问题,思路很明确,获取分辨率->每次重启游戏根据分辨率动态计算->调整位置。但是由于之前并没有去实践过,导致在一个简单的问题上卡很久。当然,一般来说,项目组针对于分辨率的适配,一般早已在框架中写有,参考调用即可。

因此,仅仅通过对组件属性注解的几篇文章想要学好unity基本是不可能的。更多的还是要通过具体实践、广泛应用才能孰能生巧。

如果看到这,已经觉得很吃力了,建议先去了解和简单学习Unity的基本使用,不必在组件的注解上深究与组件属性。博主之所以将属性注解通过图片展示效果,一方面,是简要注解属性,另一方面,更是找到我们自以为知道但是实则不了解的组件属性的作用与。这些内容也是通过网络学习,只是博主更愿意把它总结下来,这样的话,就能做到针对某个组件更加的有目的性!在这里插入图片描述


2. ScreenWithScreen Size模式下的UI适配

通过控制Reference Resolution 来进行调整UI

  • Match Width Or Height:适应你的宽或者高,Match一般设置为0.5

在这里插入图片描述

  • Expand:Canvas会进行放大,即画布的大小最小也不会低于原来我们设置的1080*720

  • Shrink:Canvas会被缩放,即画布的大小最大也不会超过原来我们设置的1920*1080

3. ConstantPhysicalSize模式下的UI适配

根据物理大小来调整进行适配

  • Physical Unit

在这里插入图片描述

  • Centimeters: 厘米

  • Milimeters: 分米

  • Inches: 英尺

  • Point:

  • Picas: 派卡

我们一般用到Point这个属性,Point指构成显示屏的点的数目

  • Fallback Screen DPI: 对应物理单位的像素密度

  • Default Sprite DPI: 默认精灵的像素密度

  • Reference Pixels Per: 每个unity单位对应的像素数

四、Graphic RayCaster组件

该组件针对的是UI作用的,用于管理图片射线响应的一个组件,关闭该组件时,UI元素则得不到射线响应

属性:

  • Ignore Reversed Graphics: 勾选,翻转的图片无法响应射线,不勾选,翻转的图片一样可以响应射线

  • Blocking Objects: 决定什么物体能够遮挡射线

    1.None: 判定没有遮挡
    2.Two D: 2D物体可以遮挡射线
    3.Three D: 3D物体可以遮挡射线
    4.All: 所有物体只要在摄像机前,都可遮挡射线

判定原则:根据碰撞体来进行判定

Blocking Mask决定什么层级能够遮挡射线,只有选中的层级才能对射线进行阻挡

五、Canvas Group组件

在这里插入图片描述
属性:

Alpha: 透明通道,对Canvas下的所以子物体都可以通过该组件下的Alpha来统一进行管理,例如需求:有几个图片,放在一起,希望这几张图片同时变透明

Interactable: 它所管理的元素是否能够接收图形射线的检测

Ignore Parent Groups: 当前的Group是否受父级Group的影响

以上呢,便是我对Canvas及其相关组件作出的简要的描述,希望能够对你有所帮助~ 也希望能获得你们的关注、点赞、评论吖~
你们的点赞、评论就是我前进的动力!在这里插入图片描述

作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/117611758

本文为ProMer_Wang的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!

以上是关于Unity3d中UGUI组件精简复盘Canvas及其相关组件的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d中UGUI组件精简复盘(十九)ContentSizeFitter组件

Unity3d中UGUI组件精简复盘(十九)ContentSizeFitter组件

Unity3d中UGUI组件精简复盘RawImage组件

Unity3d中UGUI组件精简复盘(十四)Dropdown组件

Unity3d中UGUI组件精简复盘(十七)LayoutElement组件

Unity3d中UGUI组件精简复盘(十七)LayoutElement组件