UE4——C++与UMG联动
发表于2015-10-30
下面分享一下最近在用UMG与C++联动的一个小Demo教程,暂时不附源码,大家可以先看看如果有问题的话请批评指证,待本人完善后,会附上源码。因为见社区很多朋友分享的帖子只有给个蓝图或者什么的,感觉并不是很方便,所以还是想小小吐槽一下,大家应该在可能范围内将源码附上,这样学习的朋友如果遇到非常难以解决的问题时,通过源码可能会方便很多。为了让看本帖的朋友能够多学习一点,所以下面我分享的代码主要是以截图的方式,完整性上没有问题,大家自己根据自己需求敲一边代码熟悉一下可能效果会更好。
在虚幻4引擎中UMG比较类似与UNITY中的NGUI和UGUI,无论是2DUI界面还是3DUI界面绘制都可以通过UMG快速进行搭建,相比较于HUD来说,程序可以主要负责UI界面逻辑部分,无需费时将UI所处的位置以及具体信息参数在代码中书写,因此将UMG的逻辑部分通过C++控制并暴露给蓝图,可以清晰地将UI的逻辑梳理出来。
1.引入UMG的模块进入C++项目在C++项目中 XX.Buid.cs文件中我们需要引入以下内容(希望大家可以自行配置书写代码,因此只提供截图)

引入UMG所需要的模块后,我们可以新建一个继承自UUserWidget类的UInventoryUserWidget类来控制用户的UMG。
为了简单做简单测试,我们通过暴露给蓝图一个MyUMG的字符串变量参数来观察是否UMG的蓝图可以读取到我们的C++变量。

注意(重点):这个地方有可能会出现一个问题,继承UUserWidget会报错,那么此时我们需要关闭项目,找到


右键点击后,重新生成VS项目再重新打开,才会解决问题。
2.完成用户对UMG的简单控制既然需要控制UMG,那么我们就需要在PlayerController中添加我们需要的函数,头文件如下

源文件如下:


这是一个简单UMG面板的切换,代码我稍微简单讲解几句比较重要的,虽然大家应该都可以猜得到。。。。
static ConstructorHelpers::FClassFinder<UInventoryUserWidget> InventoryUserWidgetBPClass(TEXT("/Game/Blueprints/TestUMG"));
这句主要是将我们自己创建的UMG与程序进行一个挂钩,大家需要根据自己项目目录中的UMG蓝图位置来设置。其余比较重要的我用注释已经标注出来了,主要是背包UI和背包UI控件两个变量。
完成代码编写后,我们只要能够重新编译启动UE4,那么应该就没有什么问题了,首先根据路径创建我们自己的UMG,

创建好之后,找到图表!!!,点击类设置选项,

左下角的细节面板中的类选项选择我们自己书写的用户背包控件类即可。

从这里大家可以看出来,我们完全可以设计不同的UMG控件继承我们自己设计的各种UI类,进而达到完全控制整个游戏中各个模块板块的不同功能需求,当然,在一个里面完成也OK!
最后,可以看到,在变量中我们程序中的变量已经暴露出来了,剩下的功能制作需要大家自由发挥。
