当前位置: 首页 > news >正文

UE5.4内容示例(4)UI_UMG - 学习笔记

https://www.unrealengine.com/marketplace/zh-CN/product/content-examples
《内容示例》是学习UE5的基础示例,可以用此熟悉一遍UE5的功能

UI示例
  1. UI_UMG :基本UMG
  2. UI_CommonUI :UMG多层应用
  3. UI_SlatePostBuffer UI :FX的示例,UI在全局效果的使用

UI_UMG示例

开始:关于UE5的程序启动(入口)

示例需要了解UE5程序入口,一般先要注意3处地方:

  1. 项目设置->地图和模式
    这里可以配置GameMode与GameInstance;如果配置了,会启动对应的程序;如以下表示没有做任何配置(另外需要注意 项目设置->输入,这里会配置一些操作映射)
    在这里插入图片描述
  2. 世界场景设置
    这里可以配置GameMode,与第1条是重复的配置,这里的配置会覆盖第1条的配置。
    如果看到GameMode有配置,点下放大镜,可以找到并打开此GameMode蓝图
    在这里插入图片描述
    看到GameMode_UMG蓝图中,被更改的类
    在这里插入图片描述

从这2处地方收集到,入口程序需要关注的:GameMode_UMG、BP_PlayerController_UMG、MyCharacter_UMG这3个程序。

  1. 关卡蓝图
    另还有一个地方需要关注:打开关卡蓝图,查看有没有启动的程序代码

开始:关于GameMode、PlayerController、Pawn等关系

  • 在写程序时,很难规划好,什么功能写在pawn里,什么功能写在playerController里
    在这里插入图片描述
  • Pawn是角色,写角色的功能和接口,比如坦克可以开炮和行动,开炮和行动的功能写到Pawn,并提供控制接口。AI或Player是负责操作接口进行控制。
  • PlayerController处理操作Pawn提供的接口,还需要操作UI、关联Input和摄像机运动等,承担了更多的控制工作
  • 但也有很多程序并不这样编写。是把功能直接集成到Pawn里。
  • 那这几个类,哪个类是先执行的?经测试(按print字符的先后);

发现顺序是:

  1. PlayerController
  2. 规则根据组合情况而不同,包括GameMode、Pawn、Actor,是不确定的运行顺序
  3. Pawn单独运行时,顺序高于PlayerController,但拖入Actor蓝图中,顺序就低于PlayerController
  • Player Start:玩家的起始位置
    可以把Pawn拖入场景,选择下Player 0等配置,等效于Player Start
    在这里插入图片描述

在入口类GameMode、PlayerController、Pawn等中,只有Pawn是可以被投入场景(Outliner大纲)中的


开始:UE5入口的思考

以上UE5提供的入口思维,似乎已经完美解决了问题。
但是,有一个问题在这样的结构下,显得不好操作:
一般我们做项目,需要做一些项目的配置,比如UI的首页是什么,默认有哪些模型先显示或运行、或者读取外部的哪些数据或图片等。
那这些配置的功能要在写在哪里呢?若按照UE5的入口规则,需要在GameMode(或者GameInstance)里进行配置,比较符合UE5的原意。
只是GameMode配置,要么在蓝图中,要么在变量中,这2处都不是很好配置。
熟悉Unity编程的同学,会习惯于在项目窗口里配置(相当于UE5的Outliner大纲里),会制作Manager对象完成配置工作。
个人感觉,同样可以制作Manager对象,结合世界场景设置,用PlayerController启动配置对象,来完成UE5的入口配置问题。


1.1 Sliders

在这里插入图片描述

  • MyCharacter_UMG:
    分为3类功能:控制UI的功能(显示、隐藏等)、控制角色移动的功能(鼠标看、走、跑)、生命值的功能

  • MyCharacter_UMG - UI功能:
    BeginPlayer是定义了一个Exit的UI
    在这里插入图片描述
    ShowElement:Lock Input UI是只使用UI模式;ShowElement把UMG类Create后加到屏幕Viewport中;并把Exit HUD(退出按钮的UI)也加到屏幕中。做了一个HUDActive的状态标记。
    若Lock Input UI为false,则触发UI后,角色还是可以继续走动。
    HideElement:隐藏UI

  • BP_EventDemoTrigger,触发器
    触发器可配置一个要显示的蓝图类、3DWidget还是HUD、是否Lock Input to UI
    在这里插入图片描述
    Event ActorBeginOverlap:当触发它的触碰区域后,默认会触发这个事件
    在这里插入图片描述

关于bool值的用法思考:
bool值有用于配置项的、有用于状态记录的,还有其他适合bool值的参数
如果是配置项的,可以If开头;状态的,可以Is开头;

关于状态的设计思考:
一个对象对外开放控制的接口,状态应该隐藏在接口里面,抽象出若干事件作为接口
参考软件的设计模式 - 状态模式

MyCharacter_UMG抽象出了ShowElement与HideElement 2个接口
另外,把Current Button(触发器)的对象传给UI,是为关闭UI时,同时触发触发器模型的灯的关闭;

  • BP_PlayerController_UMG
    FreeMouse:显示鼠标
    BindMouse:游戏模式

按照PlayerController与Pawn的分工,UI操作可以放在PlayerController里,不需要2个地方都放起来

触发过程:

  1. BP_EventDemoTrigger触发Overlap,找到Pawn(Character),为Pawn赋值触发器对象与UI类,然后运行ShowElement;
  2. ShowElement, 先CreateUI,加入屏幕,设置鼠标与UI操作模式
  • UMG_Sliders
    Begin:通过PlayerController设置下鼠标状态
    在这里插入图片描述
    这里使用了Text的绑定函数的功能,个人不推荐在实际项目中使用
  1. 当使用 Show Only Modified Properties来查看哪些属性被修改了时,而这个绑定是筛选不出来的
  2. 编程东一点西一点,就完全没有线索了
    在这里插入图片描述
    在这里插入图片描述
    可以使用Sliders的OnValueChanged简单实现
    在这里插入图片描述

1.2 Buttons

在这里插入图片描述

  • 通过在Text的Visibility绑定Get Visiblity_0的函数,实现Text的隐藏;实际项目中,不推荐绑定的做法。
    在这里插入图片描述
  • 如何快速地 创建或定位 一个Button的OnClicked事件
    在Designer里,选中某Button;切换到Graph视口,此时Variables会选在Button上;在右边能看到Events列表,点击创建或定位
    在这里插入图片描述

1.3 Input

在这里插入图片描述

  • UI里有3个组件:SpinBox,ComboBox,CheckBox
    在这里插入图片描述
    SpinBox取值
    在这里插入图片描述
    ComboBox判断是否有选择,示例是判断获取的值是否为空,其实可以判断Index值,没有选为-1
    在这里插入图片描述
    ComboBox取值
    在这里插入图片描述
    CheckBox取值
    在这里插入图片描述

1.4 Nested widgets

在这里插入图片描述

  • 嵌套UI,主UIWidget_NestedWidgets,在右侧有一个Scroll Box,是放嵌套的UI
    在这里插入图片描述
  • 这里蓝图写得有点乱,主要2个功能:
  1. 创建Widget_PlayerEntry的UI,嵌套在框中
    在这里插入图片描述
  2. 当Input里的值改变时,改变嵌套的UI里的值
    这里用到PlayerData结构体
    在这里插入图片描述
    在Widget_PlayerEntry中,绑定各文字框的值
    在主UI中,当Input的值改变时,重新组成PlayerData数据,并赋给Created Widget

2.1 Progress Bars

在这里插入图片描述

  • 通过2个按钮,增加或减少Progress Bar Percent的值,并判断下这个值的上下限;并给Progress Bar 赋值
  • 可以打开Hide Unrelated的按钮,清晰看到一条蓝图的主线
    在这里插入图片描述

2.2 Progress Bars

在这里插入图片描述

  • 与上面示例的差别:值是在MyCharacher_UMG里health值
  • 调用了Increase health接口来增加health值
    在这里插入图片描述

Cast To是非常消耗性能的,所以要在Begin的时候,先做一遍Cast to保存起来
另外,绑定的函数里,使用Cast To性能消耗太大


2.3 3D Widgets

在这里插入图片描述

  • 这里采用了BP_EventDemoTrigger_3D,而非BP_EventDemoTrigger
    就是说,BP_EventDemoTrigger里的Show3DWidget这个配置项是假的,Display HUD也是无用的
  • BP_EventDemoTrigger_3D里有一个3dWidget的组件,初始为隐藏,通过Overlap,来控制显示
    在这里插入图片描述
    在这里插入图片描述

讨论下,如果使用原来的触发器,要怎么实现:
把3D Widgets单独做一个蓝图Actor,放到场景中
触发器会触发PlayerController(这里是Pawn)
PlayerController可以根据tag,找到3D Widgets,触发显示3DUI(tag的名字可以和蓝图类名一致)


2.4 Widget Animation

在这里插入图片描述

  • UMG的Animations功能,示例有Bounce和Scale 2个动画(另外一个动画是无用的)

在这里插入图片描述

  • 如何启动动画?
    在这里插入图片描述
    如果Loops这里设置成0,即为循环
  • 如何停止动画?可以使用单独动画停止,或全部动画停止
    在这里插入图片描述
  • 如何全部播放动画?
    可以先建立一个动画数组,然后循环播放
    在这里插入图片描述

3.1 Images

在这里插入图片描述

  • 此示例边上有一个摄像头,拍摄人物的动画,并实时渲染到UI中
    在这里插入图片描述
  • 摄像机的蓝图RenderCapture,里面有Camera和Scene Capture Component 2D 2个组件;
    Scene Capture Component 2D选了RenderTarget图片;用于实时拍摄保存。
    在这里插入图片描述
    在这里插入图片描述
  • 建立一个材质 M_RenderTarget,材质类型是User Interface
    在这里插入图片描述
  • 图片绑定这个材质

一个问题是,这张图片的色彩太暗了,如何配置成和实际场景的色彩差不多呢?

在Scene Capture Component 2D进行一些配置
在这里插入图片描述
对环境光的亮度进行一些调整
在这里插入图片描述
对RenderTarget图片的大小也可以调整
在这里插入图片描述
最后调整下UI里的图片比例,呈现出合适的效果
在这里插入图片描述


3.2 Widget Slots

在这里插入图片描述

  • 在Canvas Panel中,可以通过设置图片的Slot,重新设定位置(这个写法比较特殊,需要Cast To)
    在这里插入图片描述

3.3 Loading Icons

在这里插入图片描述

  • 这里展示了3种进度条:CircularThrobber、Throbber、ProgressBar
  • Throbber可以放一张图片作为加载效果,可以设置多个块(Number Of Pieces)
    在这里插入图片描述

3.4 Alignment Options

在这里插入图片描述

  • 3种布局方式:Horizontal Box、Vertical Box、Uniform Grid Panel
  • 其中Horizontal Box、Vertical Box是自动布局的,随便拖一些组件进去,就会横向或纵向自动局部
    在这里插入图片描述
  • Uniform Grid Panel是需要在子元素里,设置行列2个值,才能定位在正确的位置
    在这里插入图片描述
  • 这样总要去写这个2个值比较麻烦,可以做一个蓝图去自动实现
    在这里插入图片描述

本示例就学习完毕,欢迎同学一起讨论指教,本人微信:canchs

相关文章:

UE5.4内容示例(4)UI_UMG - 学习笔记

https://www.unrealengine.com/marketplace/zh-CN/product/content-examples 《内容示例》是学习UE5的基础示例,可以用此熟悉一遍UE5的功能 UI示例 UI_UMG :基本UMGUI_CommonUI :UMG多层应用UI_SlatePostBuffer UI :FX的示例&…...

C#实现数据采集系统-配置文件化

系统优化-配置 配置信息ip端口,还有点位信息,什么的都是直接在代码里直接写死,添加点位,修改配置,比较麻烦,每次修改都需要重新生成打包。 所以将这些配置都改成配置文件,这样只需要修改配置文件,程序无须修改,即可更新。 配置代码: 如果我们有100个采集,一个个去…...

Java面试题 -- 为什么重写equals就一定要重写hashcode方法

在回答这个问题之前我们先要了解equals与hascode方法的本质是做什么的 1. equals方法 public boolean equals(Object obj) {return (this obj);}我们可以看到equals在不重写的情况下是使用判断地址值是否相同 所以默认的 equals 的逻辑就是判断的双方是否引用了一个对象&am…...

J031_使用TCP协议支持与多个客户端同时通信

一、需求文档 使用TCP协议支持与多个客户端同时通信。 1.1 Client package com.itheima.tcp2;import java.io.DataOutputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void main(String[] a…...

二分查找(精确查找、范围搜索)

目录 1. 二分查找概述2. 精确查找2.1 【left,right】2. 2 【left,right) 3. 范围查找总结 1. 二分查找概述 二分查找法,也称为二分搜索法或折半查找法,是一种在有序数组中查找特定元素的搜索算法。其基本思想是&#x…...

软件工程简记

文章目录 一、软件工程要点之软件设计二、UML(Unified Modeling Language,统一建模语言)(一)UML 的整体分类与部分功能(二)UML 各类图的具体内容三、开发模型(一)多种开发模型的特点与问题四、设计模式(一)设计模式的总体概念与原则(二)软件结构设计原则(三)常见…...

【深度学习】【语音TTS】OpenVoice v2,测评,中英文语料,Docker镜像,对比GPT-SoVITS、FishAudio、BertVITS2

https://github.com/myshell-ai/OpenVoice/blob/main/docs/USAGE.md 实际体验OpenVoice v2的TTS效果。 文章目录 环境启动 jupyter代码代码分析主要模块和功能测试一些别的中文和中英文混合总结优点缺点对比GPT-SoVITS、FishAudio、BertVITS2使用我的Docker镜像快速体验OpenVo…...

Kotlin OpenCV 图像图像50 Haar 级联分类器模型

Kotlin OpenCV 图像图像50 Haar 级联分类器模型 1 OpenCV Haar 级联分类器模型2 Kotlin OpenCV Haar 测试代码 1 OpenCV Haar 级联分类器模型 Haar级联分类器是一种用于对象检测(如人脸检测)的机器学习算法。它由Paul Viola和Michael Jones在2001年提出…...

嗖嗖移动业务大厅(Java版)

首先对此项目说明一下,我只完成了项目的基本需求,另外增加了一个用户反馈的功能,但是可能项目中间使用嗖嗖这个功能还有一些需要完善的地方,或者还有一些小bug,就当给大家参考一下了,希望谅解。代码我也上传…...

hcia复习笔记

一、OSI 七层模型 应用层:为应用程序提供服务,如文件传输、电子邮件等。 表示层:数据格式转换、加密解密、压缩解压缩。 会话层:建立、维护和管理会话。 传输层:提供端到端的可靠或不可靠的数据传输服务&#xff0…...

pycharm中安装、使用扩展工具,以QT Designer为例

pycharm中安装、使用扩展工具,以QT Designer为例 第一步,下载QT Designer安装包。找到QT Designer.exe所在位置,复制路径 第二步,打开Pycharm,选择Setting,找到扩展工具(External Tools&#xf…...

【Rust光年纪】Rust语言实用库汇总:从机器翻译到全文搜索引擎

优秀的Rust语言库探索:机器翻译、音频编解码和全文搜索引擎 前言 Rust语言在近年来迅速崛起,成为了一种备受欢迎的系统级编程语言。随着其生态系统的不断丰富,涌现出了许多优秀的库和工具。本文将重点介绍几个用于Rust语言的重要库&#xf…...

学习笔记 - 二极管的参数与选型

二极管 普通二极管: 1N4148(高频开关二极管) 整流二极管: 1N4007 1A 1000V1N5408 3A 1000V 肖特基二极管 (白线边为阴极) SS14 SS34 SS54 常见肖特基二极管参数 快恢复二极管 FR107 FR207 FR307 UF4007 可以用快恢复二…...

PMP--冲刺--易混概念

文章目录 十大知识领域一、整合管理项目管理计划与项目文件的区分: 二、范围管理三、进度管理赶工与快速跟进的区分:赶工增加资源,以最小的成本代价来压缩进度工期;快速跟进,将正常情况下按顺序进行的活动或阶段改为至…...

Resolving Maven dependencies

Maven是一种项目管理和构建工具,通常用于Java项目。这个过程包括下载项目所需的所有外部库和插件,并将它们添加到项目的构建路径中。具体来说,它正在处理名为“AAS_byBasyx”的项目或模块的依赖项。这种任务通常在你打开一个新的Maven项目或更…...

【Spring】SSM框架整合Spring和SpringMVC

目录 1.项目结构 2.项目的pom.xml文件 3.spring.xml和springMVC配置文件 4.database.properties和mybatis.xml配置文件 5. 代码编写 6.测试整合结果 1.项目结构 首先创建一个名为ssm_pro的Mavew项目,然后再在主目录和资源目录下,创建如下所示的结…...

优维2024年中思考:大模型赋予新一代运维的“非产品性”启示

近年来,人工智能在各个行业的应用大幅增加,人工智能技术取得重大进步的领域之一是IT运维。 去年四季度,优维科技敏锐地提出“新一代运维核心系统提供商”的战略新定位,决定将“DevOps及运维”回归到“运维”本身,但我…...

【中药网络药理学】筛选细胞衰老和预后相关基因(附分类代码和画图代码)

1、衰老相关基因 从HAGR和msigdb数据获取细胞衰老相关基因,将两者取交集后构建基因蛋白互作网络 HAGR数据库 该库本身提供了下载链接,我在下载后对其进行了清洗 msigdb数据库 以"aging"作为关键词,Search Filters中collection…...

华为的流程体系

缘由 2010年,华为销售额为1850亿元,其中国际市场占65%,净利润238亿元。当时,公司员工达11万人,公司处理合同达5万多个,290万个订单,大量的工作是手工处理,没有统一的流程支持&#…...

算法——长度最小的子数组209 对比代码随想录题解中对于result取值为Integer.MAX_VALUE的思考

具体解题过程可看代码随想录,我主要是对于为什么result也就是子数组和初始化要为Integer.MAX_VALUE有一个疑惑,为什么不是其他值,经过思考后我发现: 情况一:如果result为负数的话是不符合数组长度取值的一个规范的。 情况二&…...

图像处理案例03

HOGSVM数字识别 1 . 步骤2 . 代码 1 . 步骤 读入数据,把数据划分为训练集和测试集用hog提取特征用SVM训练数据测试、评价模型保存模型加载模型,应用模型 2 . 代码 import os import cv2 import sklearn import numpy as np from skimage.feature impo…...

【Kubernetes】k8s集群中kubectl的陈述式资源管理

目录 一.k8s集群资源管理方式分类 1.陈述式资源管理方式 2.声明式资源管理方式 二.陈述式资源管理方法 三.kubectl命令 四.项目生命周期 1.创建 kubectl create命令 2.发布 kubectl expose命令 3.更新 kubectl set 4.回滚 kubectl rollout 5.删除 k…...

串---顺序串实现

顺序串详解 本文档将详细介绍顺序串的基本概念、实现原理及其在 C 语言中的具体应用。通过本指南,读者将了解如何使用顺序串进行各种字符串操作。 1. 什么是顺序串? 顺序串是一种用于存储字符串的数据结构,它使用一组连续的内存空间来保存…...

吴恩达机器学习WEEK2

COURSE1 WEEK2 多维特征 在线性回归中,往往特征不止一个,而是具有多维特征 例如,在预测房价的例子中,我们知道更多的信息: x 1 x_1 x1​:房屋的面积 x 2 x_2 x2​:卧室的数目 x 3 x_3 x3​&a…...

yield and generator in python

首先,假设大家都对于pytyhon的List comprehension的使用有了一定经验(它可以用于list,set,和dict哦) 不熟悉的参考介绍: Comprehending Python’s Comprehensions – dbader.org generator generator是哦…...

spring原理(自学第六天)

Aware 接口及 InitializingBean 接口 今天将会学到Aware 接口及 InitializingBean 接口 我们可以先了解他们的作用: 1. Aware 接口用于注入一些与容器相关信息, 例如 a. BeanNameAware 注入 bean 的名字 b. BeanFactoryAware 注入…...

案例分享—国外优秀ui设计作品赏析

国外UI设计创意迭出,融合多元文化元素,以极简风搭配动态交互,打造沉浸式体验,色彩运用大胆前卫,引领界面设计新风尚 同时注重用户体验的深度挖掘,通过个性化定制与智能算法结合,让界面不仅美观且…...

【C++】简约与清晰的编程艺术

C编程的艺术:简约与清晰的实践之道 一、基础之美:基本类型与数据结构的力量二、函数与库类的艺术三、简约与清晰的实践之道 在C这一既古老又充满活力的编程语言世界里,程序员们常常面临着一个重要的选择:是追求代码的极致抽象与封…...

java之WIFI信号模块

开发步骤分为以下几点&#xff1a; 1.在 AndroidManifest 中声明相关权限&#xff08;网络和文件读写权限&#xff09; 声明权限: <uses-permission android:name"android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name"android.…...

Mybatis面试

Mybatis 面试 1、Mybatis 的执行流程是什么&#xff1f; 1、读取MyBatis配置文件&#xff1a;mybatis-config.xml 加载运行环境 和 映射文件 2、构造会话工厂 SqlSessionFactory &#xff08;全局只有一个&#xff09; 3、会话工厂创建SqlSession对象&#xff08;项目与数据…...

盐城网站制作哪家好/在线域名解析ip地址

用Xcode创建英语程序的时候&#xff0c;系统会自动给你的icon四角添加圆角效果&#xff0c;并且在icon的上部添加光晕效果&#xff0c;有些时候会使得icon看不太清楚。圆角效果是系统默认的&#xff0c;无法改变。57*57的icon&#xff0c;四角圆角的半径是9、10这样子 但是光晕…...

舟山网站建设有哪些/学it学费大概多少钱

本书介绍 如何确保你的现代网络应用是安全的&#xff1f;我怀疑有人认为这是一个简单的问题。问题是&#xff0c;尽管我们都同意这是一个难题&#xff0c;但我们在如何回答这个问题上往往意见不一。当我们与客户谈论这个话题时&#xff0c;有一个词经常出现&#xff0c;这个词概…...

对做网站有什么建议/桂林seo

多任务版web服务器程序的实现:web服务器基于TCP服务端开发,其基本构成都是相同的,但有最大一点的差异是:客户端请求及服务端响应的内容,必须符合html协议,否则将无法获取数据。客户端请求报文格式示例&#xff1a;# 请求行(还有POST请求方式)GET / HTTP/1.1\r\n# 请求体Host: w…...

专门做本子的网站/seo快速排名首页

centos一般用于生产服务器&#xff0c;其实只要安装jar就能运行了&#xff0c;这里我们安jdk是为了有时能方便的调试或修改一点小问题时&#xff0c;可以直接方便修改。首先要把系统自带的java包卸载掉&#xff0c;用命令:yum -y remove java1、把jdk的tar包&#xff0c;或gz包…...

没有网站可以做落地页/最近七天的新闻大事

1.定义自己的登录页面我们需要根据自己的业务系统构建自己的登录页面以及登录成功、失败处理在spring security提供给我的登录页面中&#xff0c;只有用户名、密码框&#xff0c;而自带的登录成功页面是空白页面&#xff08;可以重定向之前请求的路径中&#xff09;&#xff0c…...

做网站推广合同/如何创建一个个人网站

Fulutter 设置圆角背景图片&Container 设置边框、圆角、阴影 在 Flutter 中&#xff0c;如何实现背景图片呢&#xff1f;又如何实现带圆角的背景图片呢&#xff1f; Fulutter 设置圆角背景图片 使用 Container 的 decoration 可以很方便的设置一个容易组件背景图片的圆角…...