1.UMG
UMG
向关卡增加UI控件

比如按钮和文本之类

Unreal Engine C++ 入门01_控件
打开unreal engine
我安装的是Unreal Engine C++ 入门01_UnrealEngineC++_02
C++开发的话有同时安装vs2019
VS2019的话安装有注意组件问题,不然创建会报错。
windows sdk
net sdk
等有些东西有自已选 择安装

新建项目
Unreal Engine C++ 入门01_UnrealEngineC++_03
选 择空白模板

Unreal Engine C++ 入门01_UnrealEngineC++_04

选择C++项目
Unreal Engine C++ 入门01_#include_05
资源文件和c++类
Unreal Engine C++ 入门01_控件_06
打开C++ 类就可以打vs2019
ps::: 因为我增加过文件了,项目创建时就一个类的,我这边增加了类。
HowTo_UMGGameModeBase
HowTo_UMG是新建项目时,你的项目名字,
GameModeBase是中文 过来的意思是游戏模式基础类
HowTo_UMGPlayerController是增加类

Unreal Engine C++ 入门01_c++_07

Unreal Engine C++ 入门01_c++_08

第一下,引擎构建器

using UnrealBuildTool;

public class HowTo_UMG : ModuleRules
{
public HowTo_UMG(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

	PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG" });

//	PrivateDependencyModuleNames.AddRange(new string[] {  });

	// Uncomment if you are using Slate UI
	 PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
	
	// Uncomment if you are using online features
	// PrivateDependencyModuleNames.Add("OnlineSubsystem");

	// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
}

}

Unreal Engine C++ 入门01_#pragma_09

在HowTo_UMGGameModeBase.h

增加#include “Blueprint/UserWidget.h”
这个是蓝图的用户界面头文件

1>HowTo_UMGGameModeBase.h

#pragma once
#include “Blueprint/UserWidget.h”
#include “Components/Button.h”
#include “CoreMinimal.h”
#include “GameFramework/GameModeBase.h”
#include “HowTo_UMGGameModeBase.generated.h”

/**
*
*/
UCLASS()
class HOWTO_UMG_API AHowTo_UMGGameModeBase : public AGameModeBase
{
GENERATED_BODY()

public:
/** 移除当前菜单控件,并在指定类(如有)中新建控件。*/
//UFUNCTION
UFUNCTION(BlueprintCallable, Category = “UMG Game”)
void ChangeMenuWidget(TSubclassOf NewWidgetClass);

protected:
/** 游戏开始时调用。 游戏开始 */
virtual void BeginPlay() override;

/** 游戏开始时,用作菜单的控件类。*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UMG Game")
    TSubclassOf<UUserWidget> StartingWidgetClass;

/** 用作菜单的控件实例。*/
UPROPERTY()
    UUserWidget* CurrentWidget;

};

引擎用了很多跟java 差不多的东西反射和注解

UCLASS() 引擎的类的定义

UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = “UMG Game”)
向蓝图提供只读功能,也就是说,这个新建蓝图之后可以防问这个定义的内容

2>HowTo_UMGGameModeBase.cpp

#include “HowTo_UMGGameModeBase.h”

void AHowTo_UMGGameModeBase::BeginPlay()
{
Super::BeginPlay();

ChangeMenuWidget(StartingWidgetClass);

}

void AHowTo_UMGGameModeBase::ChangeMenuWidget(TSubclassOf NewWidgetClass)
{
if (CurrentWidget != nullptr)
{
CurrentWidget->RemoveFromViewport();
CurrentWidget = nullptr;
}
if (NewWidgetClass != nullptr)
{
CurrentWidget = CreateWidget(GetWorld(), NewWidgetClass);
if (CurrentWidget != nullptr)
{
CurrentWidget->AddToViewport();
}
}
}

增加HowTo_UMGPlayerController
向VS2019增加新类有引擎编辑器里增加

一定要C++ 类里边,就源码的根目录里边
Unreal Engine C++ 入门01_#pragma_10

新建 C++ 类
Unreal Engine C++ 入门01_UnrealEngineC++_11
选择玩家控制的类

Unreal Engine C++ 入门01_#include_12
h文 件内容
#include "HowTo_UMG.h"放第二个位置
编译时,有时不是代码问题,有清理一下解决方案和清理试一下,

Unreal Engine C++ 入门01_#include_13

》》》》》》》
#include “HowTo_UMGPlayerController.h”
#include “HowTo_UMG.h”

void AHowTo_UMGPlayerController::BeginPlay()
{
Super::BeginPlay();
SetInputMode(FInputModeGameAndUI());
}

cpp文 件内容

#pragma once

#include “CoreMinimal.h”
#include “GameFramework/PlayerController.h”
#include “HowTo_UMGPlayerController.generated.h”

/**
*
*/
UCLASS()
class HOWTO_UMG_API AHowTo_UMGPlayerController : public APlayerController
{
GENERATED_BODY()

public:
virtual void BeginPlay() override;

};

以上是VS2019 的操作

在引擎编辑器:

还有创建蓝图,操作 很步骤很多

Unreal Engine C++ 入门01_控件_14

换成内容里边

Unreal Engine C++ 入门01_c++_15

三个图标是我增加过的了

控件蓝图

在这里边是控件
Unreal Engine C++ 入门01_#pragma_16

蓝图类
这两个类是C++ 一起的

Unreal Engine C++ 入门01_UnrealEngineC++_17

操作方式
增加控件蓝图
Unreal Engine C++ 入门01_#pragma_18
向界面增加控件

Unreal Engine C++ 入门01_#include_19
Unreal Engine C++ 入门01_#include_20
控制面板有控件

细节有控件的属性,

Unreal Engine C++ 入门01_c++_21
在细节最下面有事件

给按钮增加事件

Unreal Engine C++ 入门01_c++_22
事件蓝图

Unreal Engine C++ 入门01_c++_23
右点击

Unreal Engine C++ 入门01_UnrealEngineC++_24

退出游戏节点,
输入Q就可以找到然后连一下连

Unreal Engine C++ 入门01_#include_25

下面的按钮点击事件,
节点增加

Unreal Engine C++ 入门01_UnrealEngineC++_26
这个节点是输入类名前这几个字母就能找

Unreal Engine C++ 入门01_UnrealEngineC++_27
得到游戏模式

Unreal Engine C++ 入门01_UnrealEngineC++_28

change menu widget 的节点增加方法,
先择Unreal Engine C++ 入门01_控件_29
一边拖,然后有输入ch 就能把新节点查找了,

Unreal Engine C++ 入门01_#pragma_30
C++和蓝图交互的方式
Unreal Engine C++ 入门01_#pragma_31
蓝图完成之后

增加蓝图类

Unreal Engine C++ 入门01_控件_32

增加分别增加这两个的蓝图类

Unreal Engine C++ 入门01_UnrealEngineC++_33
MenuGameMode 类增加 那个新创建 的控件蓝图
Unreal Engine C++ 入门01_#pragma_34

Unreal Engine C++ 入门01_#pragma_35

在关卡设置 把MenuGameMode 增加进就可以运行看到gui 了
Unreal Engine C++ 入门01_UnrealEngineC++_36

Unreal Engine C++ 入门01_c++_37

运行之后的结果,
点击有退出游戏 事件的按钮就会退出游戏

Unreal Engine C++ 入门01_控件_38

这一个流程下来,总之流程很麻烦,