前置教程:

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的更多相关文章

  1. 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove

    本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...

  2. 实例甜点 Unreal Engine 4迷你教程(3)之用C++改变Image小部件的其它属性

    完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色: 在上一次的迷你教程的LearnWidgets工程上进行(如 ...

  3. 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色

    完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...

  4. 实例甜点 Unreal Engine 4迷你教程(1)之如何用C++将纹理绘制在UserWidget的Image小部件上

    完成本迷你教程之前,请前往完成以下迷你教程: 无前置教程待完成. 本教程适合的人群: 初学者,具有开发经验两周: 本示例的目的:为了在代码中实现UMG中的这个功能: 说明:这是一些列迷你教程的首篇,所 ...

  5. 实例甜点 Unreal Engine 4迷你教程(5)之函数中的静态变量

    本小节的教程无前置教程,可直接学习,篇幅很短. 本教程浓缩起来就是一句话:函数中的静态变量在调试过程中保留值.所以需要谨慎对待. 什么意思?请先不要一步一步对着做,而整体地看一遍下面的过程: 第一步: ...

  6. Unreal Engine 4 系列教程 Part 1:入门

    原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...

  7. Unreal Engine 4 系列教程 Part 3:材质教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  8. Unreal Engine 4 系列教程 Part 4:UI教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  9. Unreal Engine 4 系列教程 Part 5:制作简单游戏

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

随机推荐

  1. JS性能优化之怎么加载JS文件

    IE8+等实行并行下载,各JS下载不受影响,但仍阻塞其他资源下载 如: 图片 所以首要规则就是:将JS放在body底部(推荐) 加载100kb的单个文件比4个25kb的文件快(减少外链文件数量)(脚本 ...

  2. R语言重要数据集分析研究——  数据集本身的分析技巧

    数据集本身的分析技巧           作者:王立敏           文章来源:网络 1.数据集 数据集,又称为资料集.数据集合或资料集合,是一种由数据所组成的集合. Data set(或dat ...

  3. IBM新合作伙伴计划助力企业转型升级

        IBM作为老牌企业,一直在引领者技术方面的变革.当IBM再一次从自我革新开始,期望能够更快的将认知计算和云推广给自己的合作伙伴和用户们,以帮助他们在新的转型期内,能够快人一步.         ...

  4. java中方法总结(每周更新)

    1.URLEncoder.encode(username,"utf-8")将"utf-8"编码的username先解码,然后再采用URL编码 2.URLDeco ...

  5. httpClient 发送请求后解析流重用的问题(HttpEntity的重用:BufferedHttpEntity)

    使用场景: 项目中使用httpClient发送一次http请求,以流的方式处理返回结果,开始发现返回的流只能使用一次,再次使用就会出错,后来看了一些解决方案,EntityUtils.consume(r ...

  6. textarea禁止拖拽

    <textarea style="resize:none;" ></textarea>'

  7. MySQL各模块工作配合

    MySQL各模块工作配合 在了解了 MySQL 的各个模块之后,我们再看看 MySQL 各个模块间是如何相互协同工作的 .接下来,我们通过启动 MySQL,客户端连接,请求 query,得到返回结果, ...

  8. Socket实现-Socket I/O

    Socket层的核心是两个函数:sosend()和soreceive().这两个函数负责处理所有Socket层和协议层之间的I/O操作. select()系统调用的作用是监控文件描述符的状态.一般用于 ...

  9. Egret index.html设置

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  10. MySQL慢查询日志

    实验环境: OS X EI Captian + MySQL 5.7 一.配置MySQL自动记录慢查询日志 查看变量,也就是配置信息 show (global) variables like '%slo ...