[UE4] UI部分

2023-10-30

UMG基础

虚幻示意图形界面设计器(Unreal Motion Graphics UI Designer)(UMG) 是一个可视化的UI创作工具,可以用来创建UI元素,如游戏中的HUD、菜单或您希望呈现给用户的其他界面相关图形。

UMG的核心是控件,这些控件是一系列预先制作的函数,可用于构建界面(如按钮、复选框、滑块、进度条等)。这些控件在专门的控件蓝图中编辑,该蓝图使用两个选项卡进行构造:设计器(Designer)选项卡允许界面和基本函数的可视化布局,而图表(Graph)选项卡提供所使用控件背后的功能。

蓝图

UMG UI设计器快速入门
【新手必读】Unreal Engine 4 UI入门教程(上)
【新手必读】Unreal Engine 4 UI入门教程(下)
关卡蓝图UI

单个关卡添加简单UI的基本步骤记录:

  1. 在角色蓝图中存放数据,和编写数据变化的逻辑
  2. 在UI蓝图中设计器模式中布置UI控件
  3. 在UI蓝图的图表模式中获取数据,然后关联UI控件
  4. 在角色蓝图中将UI蓝图添加到视口
    在这里插入图片描述

涉及多个关卡跳转UI的基本步骤记录:
以两个关卡为例:Main(设置关卡); FirstPersonExampleMap(游戏关卡)
5. 在Main的UI蓝图中布局控件
6. 为每个按钮添加点击事件
7. 在Main的UI蓝图的图表模式中为按钮点击事件添加执行逻辑
8. 在Main关卡的关卡蓝图中显示UI面板,同时,设置鼠标显示或隐藏
在这里插入图片描述
9. 在Main关卡的worldsetting中设置默认的pawn类为引擎默认的Character
在这里插入图片描述
因为我们不希望玩家能够在主菜单(Main Menu)后四处奔跑和射击,所以我们现在要为这张地图分配一个游戏模式,并更改玩家的角色,使其使用可玩的 第一人称角色(FirstPersonCharacter) 蓝图中的引擎默认角色。

在上面基础上增加一个PauseMenu的步骤:

  1. 在PauseMenu的UI蓝图中添加控件
  2. 在PauseMenu的UI蓝图的图表模式中为按钮添加逻辑
  3. 在角色蓝图中添加一个键盘按钮点击事件并添加用于创建PauseMenu的UI实例的逻辑
    在这里插入图片描述

几点思考

  1. UI控件的细节面板中 isVariable 和 ZOrder 的作用?

将控件进行命名,并将其设为一个变量,后续才能在UI蓝图的图表中进行访问和控制,最好将需要控制的UI控件都勾选isVariable;同时,设置 ZOrder,以便它出现在稍后将设置的图像的顶部。

  1. 创建控件蓝图(UI)时,建议将其提升为变量,以便之后通过蓝图脚本进行访问。
  1. 函数绑定,属性绑定,事件驱动的区别

用事件驱动UI更新
函数绑定等同于提问:"玩家角色蓝图是什么?"而在了解后,逐帧调用函数,这比较消耗性能

属性绑定在构造时获取对玩家角色蓝图的引用,无需逐帧投射并检查"玩家角色蓝图是什么?仅逐帧查询生命和能量值,比函数绑定开销更低。
事件驱动将HUD控件蓝图中的自定义事件将在玩家生命变化时检查并更新其显示,而非无论是否变化固定进行检查。

  1. 在角色蓝图中,将 事件调度器 节点添加到递减生命的脚本末端。
  2. 现在减少生命时,将调用此事件调度器。在HUD控件蓝图的事件图表中,可再次使用Event Construct获取并保存对玩家角色蓝图的引用。还可将自定义事件绑定到该角色蓝图中的事件调度器,调用事件调度器时便调用该自定义事件。
  3. 下图展示将生命和能量整合到同一个Event Construct脚本中的方法。
    在这里插入图片描述
  1. 在UI蓝图中怎样在Text控件上修改Text的内容?

首先,对应的函数为SetText(Text)
在这里插入图片描述
其次,
在这里插入图片描述

  1. 蓝图之间的通信
    UE4-(蓝图)第二十课蓝图之间的通信(类型转换、公开变量)

UMG和C++交互

UMG最佳实践

UE4 C++ —— UMG和C++交互

[UE4]UMG使用实例(C++)

UE4随笔:UMG与C++交互

使用UMG的用户界面

在这里插入图片描述

  • 加载UI蓝图的C++代码示例
auto Path = TEXT("WidgetBlueprint'/Game/Res/UI/Login/LoginForm.LoginForm_C'");
UClass* WidgetCls = LoadClass<UUserWidget>(NULL, Path);
if (APlayerController* PC = GetWold()->GetFirstPlayerController())
{
    UUserWidget* Widget = CreateWidget<UUserWidget>(PC, WidgetCls);
    if (Widget)
    {
        Widget->AddToViewPort();
    }
}
  • C++中获取UMG中的控件,并进行事件绑定

UE4 C++ —— UMG和C++交互

GetWidgetFromName(Name)

自动绑定控件

UPROPERTY(meta = (BindWidget)) // 该变量会自动寻找名为IConImage的按钮进行绑定,如果没找到会编译出错
	class UButton* IConImage;

按钮绑定事件

button->OnClicked.AddDynamic(this, &UMyUserWidget::ClickButton);

图片绑定事件

image->OnMouseButtonDownEvent.BindUFunction(this, "useFunc");

设置控件相关属性

text->SetText(FText::FromString(FString(TEXT("Test Text"))));
image->SetIsEnabled(0);
text->SetVisibility(ESlateVisibility::Visible);

//设置TextBlock颜色
MyTextBlock->SetColorAndOpacity(FSlateColor(FLinearColor(R / 255.0f, G / 255.0f, B / 255.0f, 1)));

设置鼠标永久可见

void AMyPlayerController::BeginPlay() {
	widget = Cast<UMyUserWidget>(CreateWidget(this, Creation));
	widget->AddToViewport();

	bShowMouseCursor = true;
}

Widget移动

UImage* image = Cast<UImage>(GetWidgetFromName(TEXT("Mouse")));
UCanvasPanelSlot* slot = Cast<UCanvasPanelSlot>(image->Slot);
slot->SetPosition(slot->GetPosition() + FVector2D(0, 1));

获取屏幕大小

UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetViewportSize(x_int,y_int)

获取鼠标位置

float px, py;
if (UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetMousePosition(px, py))

获取当前控件在当前窗口大小下的缩放

UWidgetLayoutLibrary::GetViewportScale(this)

设置Widget的位置(到鼠标位置)(与锚点的偏移会受到窗口大小缩放的影响,所以需要除以缩放)

UImage* image = Cast<UImage>(GetWidgetFromName(TEXT("Mouse")));
UCanvasPanelSlot* slot = Cast<UCanvasPanelSlot>(image->Slot);
auto pc = UGameplayStatics::GetPlayerController(GetWorld(), 0);
if (image && pc) {
	float px, py;
	if (pc->GetMousePosition(px, py)) {
		UCanvasPanel* cp = Cast<UCanvasPanel>(GetWidgetFromName(TEXT("ScreenPanel")));
		float scale = UWidgetLayoutLibrary::GetViewportScale(this);
		slot->SetPosition(FVector2D(px / scale, py / scale));
	}
}

设置鼠标位置(需要在Build.cs里面加SlateCore)

UGameplayStatics::GetPlayerController(GetWorld(), 0)->SetMouseLocation(x,y)

UI基础控件和自定义控件

UMG拼界面常用技术简介

UE4入门之路(UI篇):UMG系统介绍

控件反射器

基础控件

在这里插入图片描述

Border是一个只能包含一个子元素的容器。

  1. 添加一个名为testBorder的UserWidget,添加一个Border到默认成Canvas Panel容器,添加一个TextBlock到Border容器,没有看到TextBlock文字,是因为Border背景是白色、TextBlock的文字颜色也是白色。
  2. Border可以设置背景图片,也可以是颜色。
  3. 背景颜色和背景图片可以同时设置,最终的效果是保留图片纹理+图片颜色背景颜色(“颜色颜色”就是叠加颜色)。
  4. 如果背景颜色为白色,则保留背景图片原本的颜色。也可以设置Brush Color的透明度,这样背景图片也会变得透明了。UE4中的所有颜色都可以设置透明度。
  5. 与其它容器不同的是,Border容器可以在Border本身属性中设置子控件的颜色(不局限与文本控件,子控件也可以是图片等所有UI控件)和透明度,最终的效果是保留图片纹理+图片颜色*Border.Content.Color。
    如果Border.Content.Color为白色,则呈现子控件本来的颜色。
    如果Border的子控件BlockText设置了字体颜色,最终颜色也会跟Border.Content.Color叠加。
  6. Border控件还有一个比较特殊的地方就是可以相应鼠标的各种事件。

Named Slot

用户创建的UI,在成为其他UI的子控件时,默认情况下该子控件是不能拥有子控件的,此时可以给创建的UI中添加一个Named Slot,这个UI就可以拥有子控件。

RichTextBlock
UE4 UMG RichTextBlock功能简介

在这里插入图片描述

ComboBox(String)
ComboBox 下拉菜单

SpinBox 输入一个范围的数值。
UMG Spin Box 和 Text Box 限定输入为 Int

EditableText
EditableText(Multi-Line)
TextBox 输入文本(单行输入)
TextBox(Multi-Line) 多行输入
Text Box(单行、多行、EditableText控件)

在这里插入图片描述

【UE·UI篇】ListView使用经验总结

在这里插入图片描述

自定义控件

可多选的复选框
UE4中UMG CheckBox Group实现

自定义框选
【UE4】实现自定义框选

导入图片
UE4初探——从外部导入图片

3D UI

UE4制作3DUI的方法
控件交互

如使用控件组件显示以 3D UI,还需要玩家与此控件进行交互,可通过Widget Interaction组件来实现交互。
Widget Interaction组件通过射线检测,确定它是否命中世界场景中的控件组件。如命中,可设置规则确定与其交互的方式。 交互通过模拟定义的按键来执行。

UE4制作3DUI的基本步骤

  • 先制作一个控件蓝图,
  • 在实例化一个继承与Actor的类
  • 然后为上面的实例添加一个Widget组件,并将组件的class属性设置为最开始的控件蓝图

UI适配

待补充

优化

制作 UI 画面时可进行以下优化:

  • 尽量为美术资源使用 纹理,尽量不使用 材质。

  • 尽量使用 事件驱动 UI 更新,尽量不使用绑定或 Tick 事件。

  • 使用缓存不常变化的控件。

  • 使用 控件反射器(Ctrl+Shift+W)获取关于控件的信息和数据。

UI开发示例

UI对话事件

参考
https://space.bilibili.com/67108639/video

【功能】UE4 AI 对话系统流程演示

SVN进行UE4项目协作

使用SVN进行UE4项目协作

在虚幻 4 中使用 SVN 作为版本控制软件

UE4项目工程的目录结构

开发规范
https://github.com/Allar/ue5-style-guide

问题记录

  1. EventStruction被触发两次的问题
    在这里插入图片描述

  2. 怎么从一个WidgetBlueprint中访问另一个WidgetBlueprint中公开的变量
    在这里插入图片描述
    GetAllWidgetsOfClass在做全局搜索的操作,这里也可以在蓝图定义一个Widget类型的变量,引用另一个蓝图,从而去访问其内部的变量

  3. UE中Multi-Line Text Box换行的快捷键为:Shift + Enter

  4. 在while循环体中调用Delay来延时的时候,陷入死循环的问题
    循环中加入Delay

  5. UE4中UMG响应按键输入事件
    UMG - 键盘快捷键

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[UE4] UI部分 的相关文章

  • Qt Desginer布局方法

    关于Qt Desginer中的布局方法 网上教程少之又少 个人经过反复的实践和摸索 觉得可以用一句话来概括 先不断地进行小布局 然后对整体进行大布局 先不断地进行小布局的目的就是将同为一组的控件按某个格式排列使界面干净有序 同时方便以后对整
  • Qt信号与槽的链接3种方法详解

    转载自 14条消息 Qt5 9 2 VS2017入门实例 透彻解析 冯爽朗的博客 CSDN博客 vs qt 示例 由于现在书上介绍的大部分都是Qt Creator 并没有介绍Qt VS的教程 虽然说很相似 但是也有很多地方不同 对于初学者特
  • UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect

    UE4 UE4 C Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解 参考 AttributeSet是设置玩家属性的比如生命值 最大生命值 GameplayEffe
  • 极速入门体验Qt5软件开发,从安装到打包,少走弯路,Qt入门指南,串口调试助手开发实战

    文章目录 前言 一 成果先行 二 下载安装 1 安装QT 三 项目开发实战 1 创建新项目 2 UI设计 3 编写widget h头文件 4 编写widget cpp源文件 四 编译运行 五 项目打包 1 编译发布版 2 绿色版打包 3 安
  • QT信号和槽的链接问题

    QT中常用的连接信号和槽的方式为以下两种 方法1 connect ui btnClose SIGNAL clicked Widget SLOT close 方法2 connect ui btnClose QPushButton clicke
  • UI图片移动

    local x y 0 149 local run 0 local pi0 20 ui 图片2 右移动3 左移动4 ui 7266427303413860920 7266427303413860920 2 72664273034138609
  • QT-----ChartView控件的使用

    chartview可用于制作折线图 饼状图 条行 柱状 直方图系等来体现数据数据变化起浮 以下案例以折线图举例 1 使用ChartView控件 注意点 1 要在pro文件中加入 QT widgets 2 主界面应当使用QApplicatio
  • element ui的el-tree多选树(复选框)父子节点关联不关联的问题,选中当前节点,他的子节点和父节点是否被选中,非常详细

    element ui的el tree多选树 复选框 父子节点关联不关联的问题 选中当前节点 他的子节点和父节点是否被选中 非常详细 属性check strictly 官方文档提供属性check strictly 在显示复选框的情况下 是否严
  • Jquery ligerui下拉框复选,使下拉框中相应值对勾选中

    othertypeCombox ligerGetComboBoxManager selectValue 1 2 3 4 othertypeCombox ligerGetComboBoxManager bulidContent 必须加上后一行
  • Qt 信号与槽

    Qt 信号与槽 在这章节里 我们学习 Qt 的信号与槽 这里分一个章节来学习这个 Qt 的信号与槽 可见 这个信号与槽有多么重要 在学习 Qt 的过程中 信号与槽是必不可少的部分 也是 Qt 编程的 基础 是 Qt 编程的一大创新 其实与
  • 数理统计知识整理——回归分析与方差分析

    题记 时值我的北科研究生第一年下 选学 统计优化 课程 备考促学 成此笔记 以谨记 1 线性回归 1 1 原理分析 要研究最大积雪深度x与灌溉面积y之间的关系 测试得到近10年的数据如下表 使用线性回归的方法可以估计x与y之间的线性关系 线
  • Android4.0 SDK功能详解

    我在eoe的论坛找到的 就复制过来了 跟大家分享一下 Android 4 0 平台API等级 14 Android 4 0 是一次重要的平台发布版 为用户和应用程序开发者增加了大量的新特性 在下面我们将讨论的所有新特性和API中 因为它将
  • 【干货】如何实现WinApp的UI自动化测试?

    WinApp WindowsAPP 是运行在Windows操作系统上的应用程序 通常会提供一个可视的界面 用于和用户交互 例如运行在Windows系统上的Microsoft Office PyCharm Visual Studio Code
  • 探索创意无限的Photoshop CC 2020Mac/Win版

    作为一款功能强大的图像处理软件 Photoshop CC 2020 简称PS 2020 在全球范围内备受设计师 摄影师和艺术家的喜爱和推崇 它不仅为用户提供了丰富多样的工具和功能 还不断推出新的创意特效和改进的功能 让用户的创意无限延展 首
  • UI自动化测试方案

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 3k次 点赞60次 收藏8次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自动
  • element ui弹窗在别的弹窗下方,优先级不高的问题

    在 弹窗 的标签中加入append to body即可解决该问题
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • element ui弹窗在别的弹窗下方,优先级不高的问题

    在 弹窗 的标签中加入append to body即可解决该问题
  • Mac版 Photoshop 2021---PS2021

    Adobe Photoshop 2021是一款强大的图像处理软件 它可以帮助用户进行各种图像编辑 修饰和合成工作 这款软件拥有先进的图像处理技术 支持多种图像格式 可以轻松实现各种复杂的图像处理任务 它还提供了丰富的滤镜和工具 使用户可以自
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM

随机推荐