实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren
前置教程:
1. 实例甜点前面的三篇教程;
2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法):
http://www.cnblogs.com/JackSamuel/p/jack975645419_0.html
重要说明:本实例是在《实例甜点 Unreal Engine 4迷你教程(1)》所建立的工程LearnWidget上进行的。
第1步:我们想要创建两个Widget管理者,回顾一下目前已有的WidgetMng类,它有如下成员和方法:
UPROPERTY()
class UUserWidget* SlaveWidget;【我所管理的奴隶widget】
UFUNCTION()
void Initialize();【我为我的slavewidget初始化】
为了使用它们,并且扩展一些新功能,我们创建2个WidgetMng的子类:
(我究竟想干啥??我希望能够实现背包系统,就是有物品从1背包到2背包,请先看这篇博文:http://www.cnblogs.com/JackSamuel/p/jack975645419_0.html
但是摸索了一段时间之后没有找到方法,所以本文的目的就只是用C++来为VerticalBox添加子Widget)
同样,创建Bag2Mng(继承自WidgetMng)和ItemMng(继承自WidgetMng);
第2步:创建一个widget叫做Widget_Item(它作为ItemMng的奴隶Widget);
第3步:创建一个Widget叫做Widget_Bag1(它做谁的奴隶呢?看名字就能知道了吧)。配置如下(如果你没有办法通过图片来看出怎么拼UMG,请前往学习更为基础的部分):
第4步:创建一个叫做Widget_Bag2的Widget,和上面的Widget_Bag1差不多就行。【后记:Bag2这个类可以不实现,没有找到通过C++实现DragAndDrop的方法】
第5步:改一下小部件的变量名:(这一步有许多小操作,注意别饭粗心了哦)
(WidgetBag1和Bag2都这样改)
第6步:创建蓝图子类(这一步是非常有必要的,通常C++纯类很难使用,都是用BP来包装,暴露给Editor使用的):
用上面提到的三个类继承三个BP如下:
第7步:记得在BPHUD中调整:
保存编译,运行效果:
可以看到,左边和右边分别是背包1,和背包2.
第8步:【重要的一步】
加入清空儿子的逻辑:
- #include "Bag1Mng.h"
- #include "Runtime/UMG/Public/Components/VerticalBox.h"
- #include "Runtime/UMG/Public/Components/TextBlock.h"
- void ABag1Mng::Initialize()
- {
- Super::Initialize();
- VerticalBox = Cast<UVerticalBox>( SlaveWidget->GetWidgetFromName(TEXT("VB")) );
- if (VerticalBox)
- {
- VerticalBox->ClearChildren();//【请注意这个函数】
- }
- }
效果:
左侧的背包1的所有儿子都被清空了;
第9步:【本步骤企图完成:初始化20个孩子对应20个序号在背包1中】
修改代码如下:
- ▼代码开始
- void ABag1Mng::Initialize()
- {
- Super::Initialize();
- VerticalBox = Cast<UVerticalBox>( SlaveWidget->GetWidgetFromName(TEXT("VB")) );
- if (VerticalBox)
- {
- VerticalBox->ClearChildren();
- }
- for (auto i = ; i < ; i++)
- {
- UUserWidget* NewKid = CreateWidget<UUserWidget>(GWorld->GetGameInstance(), ItemWidgetClass);
- VerticalBox->AddChildToVerticalBox(
- NewKid
- );
- if(UTextBlock* Text_ID = Cast<UTextBlock>(NewKid->GetWidgetFromName(TEXT("Text_ID"))))
- Text_ID->SetText(FText::AsNumber(i));
- }
- }
- ▲代码结束
效果:
(重要的提示:如果读者已经跟丢了步骤,某些小细节没有完全一致,那么也没有关系,实在没有办法效果一致的话就只看里头的代码,和我的效果图即可,主要是在UMG的C++编程上有一个基本的掌握)
——小江村儿的文杰 zouwj5@qq.com 2017年8月4日13:57:11
实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren的更多相关文章
- 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove
本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...
- 实例甜点 Unreal Engine 4迷你教程(3)之用C++改变Image小部件的其它属性
完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色: 在上一次的迷你教程的LearnWidgets工程上进行(如 ...
- 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色
完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...
- 实例甜点 Unreal Engine 4迷你教程(1)之如何用C++将纹理绘制在UserWidget的Image小部件上
完成本迷你教程之前,请前往完成以下迷你教程: 无前置教程待完成. 本教程适合的人群: 初学者,具有开发经验两周: 本示例的目的:为了在代码中实现UMG中的这个功能: 说明:这是一些列迷你教程的首篇,所 ...
- 实例甜点 Unreal Engine 4迷你教程(5)之函数中的静态变量
本小节的教程无前置教程,可直接学习,篇幅很短. 本教程浓缩起来就是一句话:函数中的静态变量在调试过程中保留值.所以需要谨慎对待. 什么意思?请先不要一步一步对着做,而整体地看一遍下面的过程: 第一步: ...
- Unreal Engine 4 系列教程 Part 1:入门
原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...
- Unreal Engine 4 系列教程 Part 3:材质教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Unreal Engine 4 系列教程 Part 4:UI教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Unreal Engine 4 系列教程 Part 5:制作简单游戏
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
随机推荐
- kali系统破解WPA密码实战
上次发布过一篇在OSX系统破解WIFI密码的教程, 这次发布一篇使用kali破解wifi的教程 WEP和WPA/PSK的区别 WPA/PSK的加密方式相对于WEP的加密方式更加安全,WEP是一种老式的 ...
- pythonic-让python代码更高效
何为pythonic? pythonic如果翻译成中文的话就是很python.很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等. 我的理解为,很+名词表达了一种特殊和强调的意味.所以很 ...
- 为Windows资源管理器右键菜单添加菜单项
为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...
- watchdog(IWDG)
1.为了避免程序忙跑跑死了没反应,加上一个看门狗watchdog实时监控着程序,一旦程序没有在规定的时间喂狗,则狗叫使得单片机复位. 2.Independent watchdog(IWDG)内部有时钟 ...
- html模板中的数字保留两位小数
<script> //html模板中的数字保留两位小数 function formatCurrency(num) { num = num.toString().replace(/\$|\, ...
- PHP加密字符串函数(Discuz内置的)
接触Discuz有一段时间了,一直很喜欢这个论坛程序,确实是一个很不错的程序,灰常值得我们去学习,这里介绍它其中的一个加密函数(含解密)这个加密函数的特点在于,比普通的加密函数多了一个随机密钥 ,可以 ...
- strval
将变量转成字符串类型. 语法: string strval(mixed var); 返回值: 字符串 函数种类: PHP 系统功能 内容说明 本函数可将数组及类之外的变量类型转换成字符串类型. ...
- a链接传递邮箱参数
<?php class TesthuliAction extends CommonAction{ public function index(){ $email='78707411@qq.com ...
- CSS雪碧图自动生成软件
下载地址 http://www.99css.com/1524/ 包含详细的下载地址.下载步骤以及使用教程 亮点:自动合成雪碧图+自动生成雪碧图background-position代码 简单过程 下载 ...
- RocksDB上锁机制
RocksDB作为一个开源的存储引擎支持事务的ACID特性,而要支持ACID中的I(Isolation),并发控制这块是少不了的,本文主要讨论RocksDB的锁机制实现,细节会涉及到源码分析,希望通过 ...