UE4-UMG与c++交互
- 创建工程
- 打开VS
- 修改 项目名.Build.cs文件
添加”UMG”,”Slate”,”SlateCore”
- 修改 项目名.h文件
添加
<pre style="background:#F4F4F4">#include "Runtime/UMG/Public/UMG.h"</pre>
include "Runtime/UMG/Public/UMGStyle.h"
include "Runtime/UMG/Public/Blueprint/UserWidget.h"
include "Runtime/UMG/Public/Slate/SObjectWidget.h"
include "Runtime/UMG/Public/IUMGModule.h"
- 回到虚幻编辑器,创建C++类,从UserWidget派生
- 创建组件蓝图(Widget Blueprint),并添加文本控件
- 打开第5步创建的C++类,在头文件中新建文本变量,源文件中添加显示文本的代码
- 回到虚幻引擎编辑器,打开第6步创建的组件蓝图,修改其父类
- 创建显示组件实例,分为两种方法,一种是在C++中通过代码创建,另一种是在蓝图中创建。
(1) c++代码创建
l 创建HUD类,并修改类的代码,此处以“阿凡亚麻达”的代码为例
l 阿凡亚麻达博主的网址:https://www.cnblogs.com/lixiao24/p/9545090.html
|
在SlAiMenuHUDWidget.h****文件中:
// Fill out your copyright notice in the Description page of Project Settings.
pragma once
include "CoreMinimal.h"
include "GameFramework/HUD.h"
include "SlAiMenuHUD.generated.h"
/**
*/
UCLASS()
class SLAICOURSE_API ASlAiMenuHUD : public AHUD
{
GENERATED_BODY()
public:
ASlAiMenuHUD();
class USlAiMenuHUDWidget* MenuHUDWidget;
TSubclassOf<class UUserWidget> MenuHUDWidgetClass;
};
|
|
在SlAiMenuHUD.cpp****中:
// Fill out your copyright notice in the Description page of Project Settings.
include "SlAiMenuHUD.h"
include "SlAiMenuHUDWidget.h"
include "UObject/ConstructorHelpers.h"
ASlAiMenuHUD::ASlAiMenuHUD () {
if (GEngine && GEngine->GameViewport)
{
// 找到蓝图类,可以在编译器中点击SlAiMenuHUDWidget文件,然后按下ctrl+c即可获取该路径名,注意,需要加_C
static ConstructorHelpers::FClassFinder<UUserWidget> MenuHUDWidgetBP ( TEXT ( "WidgetBlueprint'/Game/UI/SlAiMenuHUDWidget.SlAiMenuHUDWidget_C'" ) );
if (MenuHUDWidgetBP.Succeeded ()) {
MenuHUDWidgetClass = MenuHUDWidgetBP.Class; // 得到class
}
MenuHUDWidget = CreateWidget<USlAiMenuHUDWidget>(GetWorld()->GetGameInstance(),MenuHUDWidgetClass );
if (MenuHUDWidget != nullptr) {
MenuHUDWidget->AddToViewport ();
}
}
}
|
l 把刚刚创建的HUD类设置为GAMEMODE里的默认HUD(需要自己创建GameMode,如何创建GameMode请查看相关官方文档)
(2) 蓝图创建方法
l 打开关卡蓝图,并在里面进行配置
- 编译,并运行测试!
PS:UMG与C++的交互到步骤8就完成了,也就是只要创建widget blurprint(控件蓝图)以及派生自UserWidget的C++类,将WidgetBlueprint中的父类设为创建的C++类,随后就可以在C++类中去获取WidgetBlueprint中的控件了。