UE4_用户控件_2_按钮的动态效果

效果展示:

操作步骤:

 1、新建一个触发Actor,更名为BP_EventTrigger。

这个蓝图类可以拖拽到场景中好多次,生成好多实例。但是我希望每次触发创建的用户控件都是不同的。添加Capsule Collision。

修改胶囊体半高和半径都为156

BP_EventTrigger事件图表中添加“事件Actor开始重叠”事件。

添加一个布尔变量display,编译,设置默认值为true。

2、新建个角色类,只用于行走,不需要骨骼网格体。

让角色具有行动能力

因为我们创建的角色不具备控制行走的事件,同时添加一个变量HUDActive控制是否具有行动能力。

这儿的事件还是使用的第三人称角色中的输入:

删除场景中默认的角色,测试下:

现在能够正常控制角色了。

3、新建个GameMode,并把默认pawn类设置为新建角色BP_My_Character。

4、世界场景设置,选择上面的gamemode。

5、、新建个拥有退出按钮的用户控件UMG_Exit,角色蓝图的“事件开始运行”创建用户控件UMG_Exit。

设置按钮的锚点和位置,如下图:

在按钮上添加个文字Exit,修改颜色为黑色,效果如下图:

角色中事件开始运行的时候把它创建出来,并在角色中创建个用户控件变量,来保存它。

6、角色中还需要加一个BP_EventTrigger类型的变量。

特别是当场景中有好几个BP_EventTrigger类型的话,可以让它们与角色重叠时创建不同的用户控件,这个变量是用于决定哪个实例触发它的。

7、角色中还得添加一个用户控件类的引用的变量affectUMG。

好知道我要创建的用户控件到底是哪一个用户控件类的实例

这个值也是从BP_EventTrigger蓝图类中得到的。

9、编辑下BP_EventTrigger蓝图类,当重叠的时候,我们把自己传递给角色的BP_EventTrigger类型的变量currentbutton。

 新建一个布尔变量Isactive,用于判断是否被激活,

默认是没激活的,当没被激活的时候,我们需要把要显示的控件类传递给角色的变量affectUMG

同时还得设置一个变量值赋予角色的affectUMG变量,新建个公开的变量赋值与它

10、现在用户控件还没有,我们没办法给公开的变量affectUM赋值,来新建个用户控件,更名为UMG_Button

双击打开,拖拽图像到画布,并设置锚点及其它数据

效果如下图:

在里面添加个画布面板,参数设置

效果如图:

添加个文本框,,设置位置及大小,添加文字

效果如下图:

我们需要文字实现换行:

换行效果如下;

 再添加个垂直框,垂直框是一个布局面板,允许子控件自动垂直布局。

设置好锚点、位置和大小

拖拽个文本放到垂直框中

设置文本如下图:

添加个间隔区

添加个文本,如下图:

添加个间隔区,再添加个文本,效果如下图:

在再垂直框的同一阶层添加个按钮,参数设置如下:

按钮上需要添加个文字:

11、现在来设置用户控件的事件图表:

(1)首先我们要理解按钮实现的是两个控件(文本和垂直框)的显示切换,我们需要对可视性进行绑定,当已启用时可视。

(2)先创建个布尔变量textvis,用于设置此控件能否被用户交互修改。默认为false。

让文本的已启用与布尔变量textvis进行绑定。

已启用是用于设置此控件能否被用户交互修改。

(3)然后对可视性绑定函数并更名为textvisible。

(4)我们现在来编辑可视性的绑定函数textvisible,通过绑定函数的返回值来决定是否可视。

(5)控件的可视性是个枚举值,所以我们需要设置返回的枚举值,需要一个这样的ESlate可视性类型的变量

(6)当控件启用的时候,我们让控件可视,当控件未启用的时候,我们让控件不可视。

(7)最后我们绑定函数返回控件的枚举值。

注意文字控件一开始是要隐藏的。

(8)我们对垂直框的可视性设置绑定函数GetVisibility_0。

(9)同时我们还需要根据这个布尔变量textvis的值设置垂直框的可视性,同时还得给垂直框创建个ESlate控件枚举值类型的变量。

(10)GetVisibility_0绑定函数设置如下:

(11)现在设置按钮的单击事件,当布尔变量textvis的值为真时设置为假,当假时设置为真:

12、先把BP_EventTrigger这个actor拖拽到场景中,这样场景中就有了这个类的对象实例了。

13、把刚做的控件赋值给公开的变量affectUM。

14、角色中把它显示出来,角色中添加自定义事件showUMG,用于显示控件。

这就是为什么我们需要的变量类型为用户控件的类引用,把变量AffectUMG赋予它:

我们设置下输入模式为设置仅输入模式UI,set input Mode UI Only:

添加到视口add to Viewport:

继续完善showUMG事件,让UMG_Exit添加到视口

先测试下效果:

没有触发成功,原因是什么呢?是因为我们还没有在BP_EventTrigger的重叠事件中“事件Actor开始重叠”中让角色显示控件。

运行效果如图:

单击按钮一下为:

15、为角色添加HideUMG自定义事件

当退出按钮被我们单击时调用。

添加点击时事件,我们需要运行角色的HideUMG事件,当然我们得需要角色先有HideUMG自定义事件,首先把显示控件添加的用户控件都给删除。

再把UMG_Exit移除

16、为UMG_Exit控件中的Exit退出按钮添加单击时事件

当退出时就不显示鼠标,鼠标是由玩家控制器控制的

发现当退出的时候,无法控制角色。

17、添加单击退出按钮退出菜单时让角色恢复控制权

运行测试无问题。

这里的控制权和鼠标显示与否的问题,可以把自定义事件写在玩家控制器里面,当用户控件被创建时,调用玩家控制器中的事件,让鼠标显示,设置输入模式仅UI,当单击退出按钮时,调用玩家控制器中的另一个事件让鼠标隐藏和设置仅输入模式游戏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497201.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bert各种变体——RoBERTA/ALBERT/DistillBert

RoBERTa 会重复一个语句10次,然后每次都mask不同的15%token。丢弃了NSP任务,论文指出NSP任务有时甚至会损害性能。使用了BPE ALBERT 1. 跨层参数共享 可以共享多头注意力层的参数,或者前馈网络层的参数,或者全部共享。 实验结果…

ADC(三):注入组的使用

有关ADC的基础知识请参考标准库入门教程 ADC(三):注入组的使用 1、规则组软件触发注入组自动注入2、规则组外部触发注入组自动注入3、规则组软件触发注入组外部触发(TIM2_CC1)4、规则组软件触发注入组外部触发&#xf…

代码随想录算法【Day4】

Day4 1.链表的题目,要在草稿纸上模拟清晰后就简单了 2.双指针更加灵活的应用。 3.环形链表多练习。 24. 两两交换链表中的节点 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* _dummyHead new ListNode(0); //虚拟头结点_dummyHead…

(南京观海微电子)——GH7009开机黑屏案例分析

一、 现象描述: 不良现象: LVDS模组,开机大概2秒后就黑屏。 二、问题分析 等主机进入Kernel 后做以下测试: 1、手动reset LCM 后 可以显示正常; 总结: 1)uboot 部分HS 太窄,仅有4个clk宽度&am…

PaddleOCR文字识别模型的FineTune

一、paddleOCR paddle框架为百度开发的深度学习框架,其中对于文字检测、识别具有较为便利的开发条件。同时PaddleOCR文字识别工具较为轻量化,并可按照任务需求进行model的finetune,满足实际的业务需求。 源码来源:githubOCR 在gi…

Spark生态圈

Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。 Spark有完善的生态圈: Spark Core:实现了…

影刀进阶指令 | Kimi (对标ChatGPT)

文章目录 影刀进阶指令 | Kimi (对标ChatGPT)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 确定问题2\. 填写问题并发送3\. 检测答案是否出完 四. 运维 影刀进阶指令 | Kimi (对标ChatGPT) 简单讲讲RPA调用kimi实现…

Spring Security3.0.2版本

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

--spring.profiles.active=prod

rootproduct-qualification:~# ps -ef | grep java root 5110 1 3 16:57 ? 00:00:54 java -jar productQualification.jar --spring.profiles.activeprod root 6476 5797 0 17:26 pts/0 00:00:00 grep --colorauto java好的,你使用 ps …

力扣矩阵-算法模版总结

lc-73.矩阵置零-(时隔14天)-12.27 思路:(23min22s) 1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据…

Markov test笔记

补充知识 来源于数学之美第五章: 到了 19 世纪,概率论的发展从相对静止的随机变量的研究发展到随机变量的时间序列 ( s 1 , s 2 , s 3 , … ) (s_1, s_2, s_3, \dots) (s1​,s2​,s3​,…),即随机过程(动态的)。这在…

DeepSpeed 使用 LoRA 训练后文件结构详解

DeepSpeed 使用 LoRA 训练后文件结构详解 在大语言模型(LLM)的训练过程中,DeepSpeed 提供了强大的分布式训练能力,而 LoRA(Low-Rank Adaptation)通过参数高效微调技术显著减少了资源占用。完成训练后&…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…

docker-开源nocodb,使用已有数据库

使用已有数据库 创建本地数据库 数据库:nocodb 用户:nocodb 密码:xxxxxx修改docker-compose.yml 默认网关的 IP 地址是 172.17.0.1(适用于 bridge 网络模式)version: "2.1" services:nocodb:environment:…

uniapp 前端解决精度丢失的问题 (后端返回分布式id)

原因: 后端使用分布式id, id为19位数,导致精度丢失 ,前端解决方法 这个是通过浏览器请求回来的数据,这个时候id 数据已经丢失了,在数据库查询不到,在调获详情接口的时候会有问题 实际的: 解决…

SQL-leetcode-180. 连续出现的数字

180. 连续出现的数字 表:Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中,id 是该表的主键。 id 是一个自增列。 找出所有至少连续出现三次的数字。 返回的…

【教程】通过Docker运行AnythingLLM

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 官方教程:Local Docker Installation ~ AnythingLLM 1、先创建一个目录用于保存anythingllm的持久化文件: sudo mkdir /app su…

soular使用教程

用 soular 配置你的组织,工作更高效!以下是快速上手的简单步骤:  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责的清晰分配。  1.1 用…

Github - 如何提交一个带有“verified”标识的commit

Github - 如何提交一个带有“verified”标识的commit 前言(Why) 今天在Github上浏览某项目的commit记录的时候发现,有的commit记录带有verified绿色标识,有的带有橘色的Unverified标识,还有的什么都不显示。 既然我是根正苗红的作者(bushi)…

基于Bregman的交替方向乘子法

目录标题 ADMM方法简介Bregman散度Bregman ADMM的原理主要优势代码示例:各个符号的解释:**梯度的几何含义**:具体数学公式:**应用示例**:**ADMM的标准形式:****ADMM中的变量角色:****ADMM中的更…