IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity快速入门之二 GUI Transform 详解 -> 正文阅读

[游戏开发]Unity快速入门之二 GUI Transform 详解

Unity快速入门之一 3D基础概念、Camera、Canvas RenderMode的几种方式对比

Unity快速入门之二 GUI Transform 与 自适应 详解

事件待定……

资源管理待定……

3D模型待定……

……

接上一篇,了解了3D基本背景后,先来说说UI和事件。这一篇不会单独介绍每一个UI元素怎么使用,而是介绍UI Rect Transform 怎么使用。


目录

UI?基础概念

Rect Transform

位置、大小、锚点、中心点

中心点(Pivot)(Raw edit mode)

锚点形态

锚点形态、位置大小形态、自适应的关系

预设

九宫格预设

纵轴预设

横轴预设

矩形预设?

(Blueprint mode)


UI?基础概念

UI:我们常说UI,其实是指的 user interface,而具体到Unity或游戏模块内,是指的某一种或某几种UI元素,比如 Butoon(按钮)、Text(文字)、Image(图片)等等。

Unity内置的UI元素包括:

UI元素(图1-1)

每一个UI元素都有自己的功能特性,而这一篇主要介绍基于UGUI的公共属性部分,Rect Transform。


Rect Transform

官方链接:Rect Transform | Unity UI | 1.0.0

主要是用来设置UI的 平移、大小、旋转、缩放、锚点、中心点,并提供了快速设置的预设。

Rect Transform(图2-1)

Rect Transform的位置和大小这边这一栏会随着锚点的变化有所改变,比如下图

锚点改变后,位置大小属性变成了上下左右(图2-2)

自适应

在研发之前我们首先会确定一个开发/设计分辨率作为我们研发过程中UI制作的基础分辨率,比如

1334x750,这种就是16:9的屏幕,那么在 667x375,1920x1180等等这种16:9的分辨率上都可以进行整体缩放。但是在其他分辨率下,比如4:3的分辨率下,如 640x480,1920x1440等分辨率的屏幕上,就无法按照原来设计的UI完全展现,这个时候,就需要我们的UI元素进行自适应。


位置、大小、锚点、中心点

UGUI坐标系

UGUI的坐标系,基于屏幕,左下为(0,0),右上为(1,1),X朝右,Y朝上为正方向。

而RectTransform里面的位置,是相对坐标,相对于父节点来说的。比锚点为例,下图中,这些Button的父节点都是Canvas,那么他们的锚点坐标都是基于Canvas的相对锚点坐标,注意看每个UI元素上白色叉叉的位置,这个我们是可以自由设置的,下面会详细介绍。

锚点相对坐标系样图(图3-1)

中心点(Pivot)

中心点,一般默认都是UI元素的中心位置,也就是(0.5,0.5),这个点,是相对于UI元素本身的相对坐标。

Pivot属性(图4-1)

?这个属性的作用是,帮助定位UI元素的平移、旋转、缩放来说的。

Scene视图中,中心点的位置,即是显示坐标Gizmos的原点(图4-2)

可以看到,此时,我们中心点是 left-center 这个按钮的中心(0.5,0.5),Pox X=80,就表示,这个按钮的中心点,距离父节点Canvas左边相对距离为固定80。

绕Z轴旋转90度(图4-3)

如上图,旋转90度,也是以中心点旋转90度,缩放也是同理,以中心点来缩放。

现在我们把中心点X坐标改成0,即Pivot X = 0,如下图:

Pivot X = 0(图4-4)

然后就可以在Scene视图中看到,Gizmos位置已经偏向了 left-center 按钮的左边缘。

Pivot X = 0(图4-5)

这个时候去看,会发现,原来显示的Pox X变成了0:

Pivot X = 0(图4-6)

Unity为了保持原来的UI元素位置不会改变,所以当改变Pivot的时候,会相应的改变Pox X。

当然,Unity的开发人员也想到了这个问题,所以还提供了另一种模式 Raw edit mode

Raw edit mode(图4-7)

?当开启这个模式以后,改变Pivot的值,Unity会保持位置大小的面板数值不变,但是会修改UI元素的位置,就变成了这样:

Raw edit mode 下改变 Pivot X = 0 与图4-6比较(图4-8)
Raw edit mode 下改变 Pivot X = 0 与图4-5比较(图4-9)

?当我们把Pivot X=0设置完成后,进行旋转和缩放:

Pivot X = 0?绕Z轴旋转90度 与图4-5比较(图4-10)

?可以看到,这个时候,旋转点的中心,就变成了 left-center按钮 的左边缘中心。缩放也是同理。

这里其实遗留了一个问题,为什么Pos Y = 0?,我们下面继续。

锚点形态

?UGUI自适应基础就是锚点,虽然叫做锚点,但其实是个矩形参数,他有点、线、面三种状态,以最简单的点状态来切入,上面提到的位置参数 Pos X?和 Pox Y 就是UI元素自身的中心点,相对于其锚点的位置偏移。

锚点位置是相对于父节点来说的(图5-1)

?锚点代表的是,UI元素相对于其父节点自适应时的 锚定位置、大小调整的 基准参数。

锚点矩形(图5-2)

锚点的矩形参数 Rect =? {min_x, min_y, max_x, max_y}。参数可以在0~1之间改变。其实就是定义最小点和最大点的位置。

而根据参数的不同状态,锚点就有了三种基本的形式:

  • :min_x = max_x 且 min_y = max_y 时,为点。
  • 轴(线)
    • min_x = max_x 且?min_y ≠ max_y 时,为纵轴。
    • min_x ≠ max_x 且?min_y = max_y 时,为横轴。
  • 矩形(面):min_x ≠ max_x 且?min_y ≠ max_y 时,为矩形。

下面五幅图分别代表了不同形态的示例:

Anchor为点的形态(中心)min_x = max_x = 0.5 且?min_y = max_y = 0.5(图5-3)

Anchor为点的形态(左上)min_x = max_x = 0 且?min_y = max_y = 1(图5-4)

Anchor为横轴的形态(左侧)min_x = max_x = 0 且?min_y ≠ max_y(图5-5)
Anchor为纵轴的形态(上侧)min_x ≠ max_x 且?min_y = max_y = 1(图5-6)
Anchor为矩形的形态 min_x ≠ max_x 且?min_y ≠ max_y(图5-7)

锚点形态、位置大小形态、自适应的关系

首先有个前提,就是,位置、大小、内边距这些绝对参数,是不会随分辨率变化而变化的,而锚点是范围(?0~1 )基于父节点的相对坐标,所以可以使UI发生自适应。

锚点的点形态下,位置大小形态与自适应的关系:

回忆下公式min_x = max_x 且 min_y = max_y 时,为点,即 min_point = max_point,最小点=最大点。

当锚点为点形态的时候,那么对一个UI元素位置大小形态

  • 位置:Pos X(X坐标),Pos Y(Y坐标), Pos Z(朝向屏幕为正方向,暂时不用)
  • 大小:Width(宽度),Height(高度)
    锚点为点形态时,位置与大小的形态(图6-1)

由于Pos、Width、Height都是固定的,所以结合锚点自适应,那么这里整体来描述下就是:

  • 我们将按钮文本设置为left-center。
  • 中心点设置在了它(按钮)的左边缘中心上 Povit=(x=0,y=0.5)。
  • 绕中心点的Z轴进行了90度旋转 Rotation=(0,0,90)。
  • 锚点设置在了它父节点(Canvas)左边缘中心的位置 Anchors=(0,0.5,0,0.5)。
  • 中心点与锚点的绝对距离为 Pos=(X=80,Y=0)。
  • 绝对大小为 Size=(Width=160,Height=30)。

那么在屏幕分辨率改变时,我们UI元素的左边缘中心(0,0.5),始终会保持在其父节点左边缘中心(0,0.5,0,0.5)横纵距离为(80,0)位置上,且大小始终为(160,30),并绕Z轴旋转了(0,0,90)度,由下面两幅图就可以看出效果:

分辨率比较宽(图6-2)
分辨率很窄(图6-3)

锚点的轴形态下,位置大小形态与自适应的关系:

当锚点为轴形态的时候,那么对一个UI元素位置大小形态

纵轴

回忆下公式,min_x = max_x 且?min_y ≠ max_y 时,为纵轴。

即在父节点为背景的一个矩形上,以min_x = max_x为x坐标(范围0~1),从min_y画一条到man_y坐标的竖线(长度0~1),并且,竖线的长短会随着父节点的高变化而变化,x相对于父节点始终保持这个x的坐标比例。

  • 位置与上内边距:Pos X(X坐标),Top(Button上边距离锚点纵轴上点/上边 max_y 的绝对距离)
  • 大小与下内边距:Width(宽度),Bottom(Button下边距离锚点纵轴下点/下边 min_y 的绝对距离)

内边距Unity原文描述为:padding inside the rectangle defined by the anchors,锚点矩形的内边距。

锚点纵轴模式样图(图7-1)

这里最大的区别就是,由于不在是一个点,而变成了一条线,其实就是区分出了这个锚点矩形的上边和下边属性,所以描述一个UI元素的位置和大小时,使用了内边距。

那么也来整体描述一下:

  • 我们将按钮文本设置为left-stretch。
  • 中心点设置在了它的中心上 Povit=(x=0,y=0.5)。
  • 不进行任何旋转 Rotation=(0,0,0)。
  • 锚点设置在了它父节点左边线上?Anchors=(0,0,0,1)。
  • 中心点与锚点横轴(X)绝对距离为 Pos X=(80),绝对宽度 Width=(160)。
  • left-stretch按钮上边到锚点矩形上边(max_y)的绝对内边距(padding) Top={100}。
  • left-stretch按钮下边到锚点矩形下边(max_y)的绝对内边距(padding) Bottom={200}。

那么在屏幕分辨率改变时,我们UI元素的左边缘中心(0,0.5),始终会保持在其父节点左边缘横向距离为(80)位置上,且宽度始终为(160),高度随父节点而变化,UI元素上边始终与父节点上边缘距离为(100),下边始终与父节点下边缘距离为(200),且没有进行任何缩放旋转。由下面两幅图就可以看出效果:

分辨率比较大(图7-2)

分辨率比较小(图7-3)

横轴

回忆下公式,min_x = max_x 且?min_y ≠ max_y 时,为横轴。这种情况和纵轴可以进行类比,也就是:

  • 位置与左内边距:Left(Button左边距离锚点横轴左点/左边 min_x 的绝对距离),Pos Y(Y坐标)
  • 大小与右内边距:Right(Button右边距离锚点横轴右点/右边 max_x 的绝对距离),Height(高度)
锚点横轴模式样图(图8-1)

?直接放对比图吧:

分辨率比较大(图8-2)
分辨率比较小(图8-3)

锚点的矩形形态下,位置大小形态与自适应的关系:

这个就是横轴与纵轴形态结合了。

回忆下公式,min_x ≠ max_x 且?min_y ≠ max_y 时,即为一个矩形。

  • 左上内边距:Left(左 Padding),Top(上 Padding)
  • 右下内边距:Right(右 Padding),Bottom(下 Padding)
锚点矩形模式样图(图9-1)
分辨率比较大(图9-2)
分辨率比较小(图9-3)

预设

预设是直接针对锚点、中心点、位置进行快速设置的一个方式。

  • 鼠标直接点击:设置锚点。
  • Shift+鼠标:设置锚点和中心点。
  • Alt+鼠标:设置位置和中心点。
  • Shift+Alt+鼠标:设置锚点、中心点、位置
锚点、中心点、位置预设(图10-1)

由于中心点只会影响位置的数值表现,所以下面只放锚点和位置同时设置的几个效果图。

准备两个按钮 center和offset,center在中心,offset的位置有偏移但是锚点依然在中心。从这两个按钮为?基础模板?对后面的预设效果进行展示。

??

九宫格预设

中间这一块,我代称为九宫格预设

左上锚点及位置预设:

??

中上锚点及位置预设:

?

右中锚点及位置预设:

??

右下锚点及位置预设:

??

中下锚点及位置预设:

?

左下锚点及位置预设:

??

左中锚点及位置预设:

??

九宫格预设Game视图表现:

预设九宫格大分辨率-Game视图
预设九宫格小分辨率-Game视图
预设九宫格更小的分辨率-Game视图

纵轴预设

下面这排我代称为纵轴预设:

左纵轴锚点及位置预设:?

??

中纵轴锚点及位置预设:

?

右纵轴锚点及位置预设:

?

纵轴预设Game视图表现:

预设纵轴大分辨率-Game视图
预设纵轴小分辨率-Game视图
预设纵轴更小的分辨率-Game视图

横轴预设

右面这排我代称为横轴预设:

上横轴锚点及位置预设:

??

中横轴锚点及位置预设:

??

下横轴锚点及位置预设:

??

纵轴预设Game视图表现:

预设横轴大分辨率-Game视图
预设横轴小分辨率-Game视图

矩形预设?

最后这个我称为矩形预设了

矩形预设Game视图表现:

预设矩形大分辨率-Game视图

预设矩形小分辨率-Game视图

到这儿其实就差不多了,不过细心的应该发现了,RectTransform面板上,其实还有一个按钮:

Blueprint mode

Blueprint mode

这个没有在前面提到是因为,在制作上不一定会用到,Raw edit mode也一样。

首先在Scene视图上,有一个2D按钮:

2D按钮

?点击后,会出现蓝色顶点的白色线框,包围Button:

2D模式

?当我们直接在面板上更改旋转缩放数值时,未开启Blueprint mode,这个包围盒会跟着Button一起变化:

旋转90度

?当开启Blueprint mode以后,包围盒只显示原本按钮的大小,不会跟随旋转和缩放属性变化。

开启Blueprint mode

算是一个辅助功能吧。

下一篇准备对事件进行简介。3Q。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 16:10:45  更:2021-11-15 16:11:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 23:45:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码