【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)

简介: 【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)

UI设计又称界面设计,是指对软件的人机交互、操作逻辑、界面美观的整体设计,UI就相当于人可以看到的界面,并且可以对UI进行交互。

Unity  3D的UI,分为UGUI和GUI,UGUI主要是图形渲染界面,搭建方便,学习比较容易,GUI主要是代码渲染界面,需要在编写代码时就思考如何完善界面布局,在运行项目时才能看到效果

UGUI常用组件介绍

1:Canvas

所有的UI组件都在画布的子集里,画布相当于所有UI组件的容器,每当创建一个UI物体时,Canvas都会自动创建,所有的UI元素都必须是Canvas的子物体,和Canvas一同创建的还有一个EventSystem,它是一个基于Input的事件系统,可以对键盘 触摸 鼠标自定义输入进行处理

Canvas:控制UI的渲染模式

Render Mode:渲染模式

Screen Space overlay:让UI始终位于界面最前面

Screen Space camera:赋值一个相机 按照相机的距离前后显示UI和物体

World Space:让画布变成一个3D物体 可以进行移动旋转等等

Canvas Scaler:控制UI画布的缩放比例

Constant Pixel Size:固定像素大小 无论屏幕尺寸如何变化,UI都不会变化

Scale With Screen Size:根据屏幕分辨率,自动调节UI比例

Constant Physical Size:固定物理像素大小

Graphic Raycaster:控制是否让UI响应射线点击

Ignore Reversed Graphic:忽略反转的UI  UI反转后点击无效

Blocking Objects:阻挡点击物体 当UI前有物体时 点击前面的物体射线会被阻挡

Blocking Mask:阻挡层级 当UI前有设置的层级时 点击前面的物体射线会被阻挡

2:Text

Text组件是UGUI中最常用的组件,它的作用是对文本数据进行处理并显示

Font:显示文字的字体

Line Spacing:行与行之间的垂直距离

Rich Text:富文本格式 勾选后可以显示文本中的标记标签信息

UGUI创建的所有组件都会默认勾选。

3:Image

Image组件是UGUI中比较常用的组件,用来控制和显示图片

Source Image:需要显示的图片的来源

Color:图片的颜色

Material:渲染图像的材质

Raycast Target:能否接收到射线检测

Image Type:图片的排列方式

4:Button

Button是一个按钮组件,在开发中经常使用,通过单击按钮执行某些事件、动作、切换状态等

Interactable:是否启动按钮 取消勾选则按钮失效

Transition:按钮状态过渡的类型

Navigation:导航

On Click:按钮单击事件的列表 设置单击后执行哪些函数

Button组件可以通过On Click手动添加监听事件,也可以通过代码动态添加监听事件

Button按钮监听函数测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_16_1 : MonoBehaviour
{
    public void OnClickTest()
    {
        Debug.Log("点击了按钮");
    }
}

下面介绍代码动态添加监听事件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test_16_2 : MonoBehaviour
{
    Button TestBtn;
    void Start()
    {
        TestBtn = GetComponent<Button>();
        TestBtn.onClick.AddListener(OnClickTest);
    }
    public void OnClickTest()
    {
        Debug.Log("点击了按钮");
    }
}

然后将脚本添加到Button组件上执行即可

5:Toggle

在项目开发时,需要一个按钮模拟和控制开关,这就是Toggle的作用,Toggle组件通常进行状态判断,如是否记住密码,是否开启某些指令等

Toggle按钮监听函数测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test_16_3 : MonoBehaviour
{
    public void OnValueChanged(bool isOn)
    {
        if (isOn)
        {
            Debug.Log("开启");
        }
        else
        {
            Debug.Log("关闭");
        }
    }
}

将脚本绑定到相机对象上,再添加到OnValueChanged单击事件中

下面通过代码动态添加监听事件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test_16_4 : MonoBehaviour
{
    Toggle TestToggle;
    void Start()
    {
        TestToggle = GetComponent<Toggle>();
        TestToggle.onValueChanged.AddListener(OnValueChanged);
    }
    public void OnValueChanged(bool isOn)
    {
        if (isOn)
        {
            Debug.Log("开启");
        }
        else
        {
            Debug.Log("关闭");
        }
    }
}

6:Slider

Slider是一个滑动条组件,一般用来制作血条或者进度条

下面我们来做一个滑动条自增的效果,类似于进度条 脚本代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test_16_5 : MonoBehaviour
{
    public Slider m_Slider;//Slider组件
    public Text m_Text;//Text组件
    void Start()
    {
        //值初始化
        m_Slider.value = 0;
        m_Text.text = "";
    }
    void Update()
    {
        if (m_Slider.value < 100)
        {
            m_Slider.value += Time.deltaTime;
            //将value的取小数点两位
            m_Text.text = m_Slider.value.ToString(("F")) + "%";
        }
    }
}

7:ScrollView

ScrollView组件是一个滚动窗口以及区域组件,在做游戏背包或者商城展示大量物品时,可以使用ScrollView组件

8:Dropdown

下拉菜单,可用于快速创建大量选择项、创建下拉菜单模板等

Dropdown组件比较常用的功能有添加选项、添加监听事件等等

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test_16_6 : MonoBehaviour
{
    public Dropdown m_Dropdown;
    void Start()
    {
        //第一种添加下拉选项的方案
        Dropdown.OptionData data = new Dropdown.OptionData();
        data.text = "第一章";
        Dropdown.OptionData data2 = new Dropdown.OptionData();
        data2.text = "第二章";
        m_Dropdown.options.Add(data);
        m_Dropdown.options.Add(data2);
        //第二种添加下拉选项的方案
        List<Dropdown.OptionData> listOptions = new List<Dropdown.OptionData>();
        listOptions.Add(new Dropdown.OptionData("第三章"));
        listOptions.Add(new Dropdown.OptionData("第四章"));
        m_Dropdown.AddOptions(listOptions);
        m_Dropdown.onValueChanged.AddListener(OnValueChanged);
    }
    public void OnValueChanged(int value)
    {
        switch (value)
        {
            case 0:
                Debug.Log("第一章");
                break;
            case 1:
                Debug.Log("第二章");
                break;
            case 2:
                Debug.Log("第三章");
                break;
            case 3:
                Debug.Log("第四章");
                break;
            default:
                break;
        }
    }
}

9:InputField

InputField组件是输入框组件,是一个用来管理输入的组件,通常用来输入用户的账号,密码或者再聊天室输入文字等等

下面添加单击登录按钮后显示密码和账号功能 代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test_16_7 : MonoBehaviour
{
    public InputField m_InputFieldName;
    public InputField m_InputFieldPwd;
    public Button m_ButtonLogin;
    public Text m_TextInfo;
    void Start()
    {
        m_ButtonLogin.onClick.AddListener(Button_OnClickEvent);
    }
    public void Button_OnClickEvent()
    {
        m_TextInfo.text = "账号:" + m_InputFieldName.text + " 密码:" + m_InputFieldPwd.text;
    }
}

运行程序 输入账号和密码,单击登录按钮可以看到账号和密码显示出来

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
10天前
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
10天前
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
10天前
|
图形学
Unity UGUI拖拽移动
本文介绍了两种UI拖拽实现方式:精准拖拽和克隆拖拽。精准拖拽通过计算鼠标点击点与UI中心的偏移量,使UI跟随鼠标移动,适用于需要精确控制的场景。代码中通过`IBeginDragHandler`、`IDragHandler`和`IEndDragHandler`接口实现拖拽逻辑。克隆拖拽则在拖拽时克隆一个UI对象,使其跟随鼠标移动,适合视觉效果需求较高的场景。代码中同样使用上述接口,并在拖拽结束时销毁克隆对象。具体实现可参考提供的代码示例。
|
11天前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
57 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
11天前
|
图形学
Unity UGUI实现鼠标拖动图片
在 Unity UGUI 中实现鼠标拖动图片功能,主要涉及事件检测、坐标转换和物体位置更新。根据鼠标移动量更新图片位置。代码示例展示了如何通过这些步骤实现拖动效果。
|
11天前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
141 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
UED
「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统
本篇教程将实现一个模拟火车票查询系统,通过输入条件筛选车次信息,并展示动态筛选结果,学习事件处理、状态管理和界面展示的综合开发技巧。
72 13
|
2月前
|
人工智能 开发框架 JavaScript
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
LowCodeEngine 是阿里巴巴开源的低代码开发框架,旨在通过拖拽、配置等简单操作,帮助开发者快速构建复杂的系统页面,提升开发效率和质量。
143 4
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
|
2月前
|
人工智能 搜索推荐 算法
婚恋交友系统UI/UX设计优化 婚恋交友系统用户界面友好性提升 婚恋交友系统用户行为分析与优化 婚恋交友系统用户反馈收集与处理
针对婚恋交友系统的UI/UX设计优化,本文提出多项策略:简化用户界面、提升交互体验、个性化推荐算法;增强用户界面友好性,包括适应性、无障碍及情感化设计;通过数据收集与分析优化用户行为路径;建立多渠道反馈机制,分类处理并及时告知结果。这些措施旨在提高用户体验和满意度,促进平台健康发展。[点击查看完整演示和免费源码](https://gitee.com/duoke-official-open-source/hunlianjiaoyou)
131 4
|
5月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
275 4