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:UI自动布局与多级菜单 -> 正文阅读

[游戏开发]Unity:UI自动布局与多级菜单

在自动布局中主要用到了锚点、轴心、Content?Size?Fitter、Vertical Layout Group这几个特性。

一、锚点、轴心

锚点与锚心是两个在UI当中比较重要的概念了,作为初学者,弄了好久才弄明白。

1.锚点

首先可参考Unity手册:矩形变换 - Unity 手册

锚点又称锚钉,既然能称之为钉子说明其是牢固的,但是其的牢固是相对父物体的,即以父物体的坐标为参考单位的。

最形象贴切的理解是这个:unity中关于锚点的相关知识 - LittleMan丶 - 博客园

锚点相当于钉子,其位置只受到父物体大小的影响,并且锚点的坐标是以父物体的四个小蓝点作为坐标系参考的。

而子物体的四个蓝色小圆点则是控制子物体宽高比例的,当锚点发生变化时(注意这个条件),这四个蓝色小圆点跟锚点之间的距离是固定的。

2.轴心

轴心可以理解为是子物体的坐标系原点,子物体的平移、缩放、旋转都是以轴心为原点进行的。轴心的坐标是以此物体的四个蓝色小圆点作为参考坐标系的。

3.Content?Size?Fitter

为物体添加上Content?Size?Fitter组件可以使物体根据自己的内容进行一个自动缩放,可以选择垂直或水平的自动缩放。

可参考:自动布局 - Unity 手册

4.结合锚点和轴心的一个小demo

以玩家的等级和ID这个应用场景为例。玩家的等级常常会随着玩家的ID往右顶,

?ID变长了,等级还是在右边随着ID边长而往右顶出去。

?这个一共有三步:

?整个层次如上。ID与等级均是UI?Text。

1)给ID物体添加Content?Size?Fitter组件,并设置为水平自适应。

?2)设置ID的轴心的x坐标为0。因为文字是往右增长的,将轴心x坐标设置为0,才能保证ID会往右长。

?3)设置等级的锚点的x的坐标均为1。这样便能保证ID往右顶时,等级能保持相对位置稳定。

二、多级菜单

1.Vertical Layout Group

一个可以自动布局的组件。给父物体添加这个组件后,再为父物体添加子物体时会对子物体进行自动布局。子物体的自动布局的相关属性是可控制的。

其相关属性可参考:垂直布局组 (Vertical Layout Group) - Unity 手册

2.多级菜单制作demo

一个看似简单的多级菜单,用到了锚点、轴心、Content?Size?Fitter、Vertical Layout Group、协程。

先贴一个整体的层次图:

?实现的功能大致就是点击主按钮,该菜单栏目下的其他小按钮会消失或出现,并且整个大菜单栏会自动布局。

补充一个小知识:Scroll View组件的Height属性要比Content的Height属性小,否则其垂直滚动轴会消失。

接下来步骤详解:

1)创建一个名叫菜单的空物体,和一个叫菜单1的空物体,将菜单1设置为菜单的子物体。

2)为菜单添加Content?Size?Fitter组件并设置为垂直自适应(添加这个组件是为了使得中间的按钮消失后能让后面的按钮自动顶上来),添加Vertical Layout Group。然后设置其轴心的Y坐标为1,保证这个菜单是往下增长的。整个设置如下:

?3)同2),为菜单1修改一样的步骤

?4)接下来为菜单1依次添加四个按钮。添加的时候是会自动布局的。

?5)将菜单1进行复制,复制的时候也是会自动布局的。

?6)在复制的过程中,可能会出现UI错乱并没有执行自动布局的情况,这个也确实有点坑。经过个人的测试,应该是Content?Size?Fitter组件或Vertical Layout Group组件没有被及时触发,因此我们需要写个协程及时触发。

因此创建一个ControlSize的脚本挂在菜单这个物体上:

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

public class ControlSize : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        SetContentSizeActive();
    }

    public void SetButtonActive(GameObject button)//控制按钮消失
    {
        if (button.active == false)
        {
            button.SetActive( true);
        }
        else
        {
            button.SetActive(false); 
        }
        SetContentSizeActive();
        //LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform);
    }
    void SetContentSizeActive()
    {
        StartCoroutine(HelpSet());//及时触发
    }
    IEnumerator HelpSet()
    {
        this.GetComponent<ContentSizeFitter>().enabled = false;
        yield return null;
        this.GetComponent<ContentSizeFitter>().enabled = true;
    }
}

然后给每个小菜单的主按钮添加时间,控制小按钮的消失与出现。

7)最终效果

点击Button2,其下面的小按钮会被折叠,并且整个菜单栏目会被自动布局。

?

?

  游戏开发 最新文章
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
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:07:46  更:2022-07-03 11:07:58 
 
开发: 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/23 10:44:01-

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