UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面

目录

一、目的、参考:

1、UE4纯C++与Slate开发沙盒游戏:1.项目介绍与资源获取

二、视频内容:

1、解压文件、然后打开uproject文件

2、地图

3、GamePlay框架

4、SlAiCourse.Build.cs

5、GENERATED_BODY()和GENERATED_UCLASS_BODY()的区别

6、SlAiMenuGameMode.h

7、SlAiMenuGameMode.cpp

8、SlAiMenuController.h

9、SlAiMenuController.cpp

10、运行

11、创建俩个Slate Widget:SlAiMenuHUDWidget和SlAiMenuWidget

12、创建SlateWidget的俩种方式、SlAiMenuHUD.h和SlAiMenuHUD.cpp

13、SlAiMenuHUD.h

14、SlAiMenuHUD.cpp

15、创建按钮:SSlAiMenuHUDWidget.cpp


一、目的、参考:

1、UE4纯C++与Slate开发沙盒游戏:1.项目介绍与资源获取

https://blog.csdn.net/qq_40544338/article/details/105497594#8%E3%80%81UE4%E7%9A%84Gameplay%E6%A1%86%E6%9E%B6

①总结:good:介绍了写这个系列博客的目的、参考,不了解的可以查看一下

 

二、视频内容:

1、解压文件、然后打开uproject文件

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第1张图片UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第2张图片

 

2、地图

①在Content下面新建Map文件夹。

②在Map文件夹下面,创建地图:MenuMap

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第3张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第4张图片

③项目设置里面修改Map

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第5张图片

 

3、GamePlay框架

①创建名字为SlAiMenuGameMode的GameModeBase的C++类

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第6张图片 UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第7张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第8张图片

②新建Player Controller的C++类:SlAiMenuController

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第9张图片 UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第10张图片

 

③新建HUD的C++类:SlAiMenuHUD

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第11张图片UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第12张图片 

④编辑器中设置GameMode:

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第13张图片

 

4、SlAiCourse.Build.cs

①添加Slate和SlateCore的Module

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第14张图片UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第15张图片

        //添加模块
        PublicDependencyModuleNames.AddRange(new string[]
        {
            "Core",
            "CoreUObject",
            "Engine",
            "InputCore",
            "Slate",//Slate模块
            "SlateCore"//SlateCore模块
        });

 

5、GENERATED_BODY()和GENERATED_UCLASS_BODY()的区别

①GENERATED_BODY()和GENERATED_UCLASS_BODY()

②4.17之后就基本使用GENERATED_BODY,如果使用这个函数,少了一些构造函数的步骤

 

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第16张图片UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第17张图片

③如果使用GENERATED_UCLASS_BODY,那么构造函数就需要如图添加一些内容(可能是比较麻烦,所以4.17之后就将其不用了)

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第18张图片

 

6、SlAiMenuGameMode.h

①添加构造函数

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第19张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第20张图片

UCLASS()
class SLAICOURSE_API ASlAiMenuGameMode : public AGameModeBase
{
	GENERATED_BODY()  //4.17之后就基本使用GENERATED_BODY,如果使用这个函数,少了一些构造函数的步骤
	//GENERATED_UCLASS_BODY()	//如果使用GENERATED_UCLASS_BODY,那么构造函数就需要如图添加一些内容(可能是比较麻烦,所以4.17之后就将其不用了)
	
public:
	ASlAiMenuGameMode();//构造函数
	
};

7、SlAiMenuGameMode.cpp

①StaticClass:通过T::StaticClass()获得对应类的UClass的完整代码调用

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第21张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第22张图片

ASlAiMenuGameMode::ASlAiMenuGameMode()
{
	//通过T::StaticClass()获得对应类的UClass的完整代码调用
	PlayerControllerClass = ASlAiMenuController::StaticClass();//世界设置中PlayerControllerClass选择为ASlAiMenuController
	HUDClass = ASlAiMenuHUD::StaticClass();//世界设置中HUDClass选择为ASlAiMenuHUD
}

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第23张图片

 

8、SlAiMenuController.h

①构造函数:

②输入模式:

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第24张图片

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "SlAiMenuController.generated.h"

/**
 * 
 */
UCLASS()
class SLAICOURSE_API ASlAiMenuController : public APlayerController
{
	GENERATED_BODY()
	
public:
	ASlAiMenuController();//构造函数
	
protected:
	//在成员函数声明或定义中, override 确保该函数为虚函数并覆写来自基类的虚函数。
	virtual void BeginPlay() override;//虚函数重载:开始游戏;
};

 

9、SlAiMenuController.cpp

①显示鼠标:

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第25张图片

②输入模式:重写一下BeginPlay

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第26张图片

③AActor的生命周期:

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第27张图片

 ④鼠标锁定:

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第28张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第29张图片

// Fill out your copyright notice in the Description page of Project Settings.

#include "SlAiMenuController.h"

ASlAiMenuController::ASlAiMenuController()
{
	bShowMouseCursor = true;//显示鼠标
}

//虚函数重载:开始游戏;
void ASlAiMenuController::BeginPlay()
{
	//输入模式
	FInputModeUIOnly InputMode;
	InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::LockAlways);//鼠标锁定在屏幕对话框里面
	SetInputMode(InputMode);
}

 

10、运行

①此时GameMode里面的一些选项就自动绑定了,

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第30张图片 ②单独开一个窗口播放游戏,此时鼠标就被锁定在游戏里面了。

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第31张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第32张图片

③但是我运行的时候发现鼠标有时候在外面有时候在里面 ,只有鼠标连续左键点击很多下才能让鼠标一直在游戏框中

 

11、创建俩个Slate Widget:SlAiMenuHUDWidget和SlAiMenuWidget

①创建C++类:SlAiMenuHUDWidget

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第33张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第34张图片 ②创建C++类:SlAiMenuWidget

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第35张图片 UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第36张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第37张图片

 

12、创建SlateWidget的俩种方式、SlAiMenuHUD.h和SlAiMenuHUD.cpp

①创建SlateWidget的俩种方式

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第38张图片

 

13、SlAiMenuHUD.h

①TSharedPtr是虚幻自身实现的一套类似STD的共享指针,它的内部实现自动释放内存的机制是引用计数。

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第39张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第40张图片 

// 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(); //构造函数

	//TSharedPtr是虚幻自身实现的一套类似STD的共享指针,它的内部实现自动释放内存的机制是引用计数。
	TSharedPtr MenuHUDWidget;
	
};

 

14、SlAiMenuHUD.cpp

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第41张图片

// Fill out your copyright notice in the Description page of Project Settings.

#include "SlAiMenuHUD.h"
#include "SSlAiMenuHUDWidget.h"
#include "SlateBasics.h"

ASlAiMenuHUD::ASlAiMenuHUD()
{
	//创建SlateWidget的方法:
	if (GEngine&&GEngine->GameViewport)
	{
		SAssignNew(MenuHUDWidget, SSlAiMenuHUDWidget);

		GEngine->GameViewport->AddViewportWidgetContent(SNew(SWeakWidget).PossiblyNullContent(MenuHUDWidget.ToSharedRef()));
	}

}


 

15、创建按钮:SSlAiMenuHUDWidget.cpp

①中括号是UE4的重载运算符,不是数组符号,

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第42张图片

②创建按钮:

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第43张图片UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第44张图片

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第45张图片

// Fill out your copyright notice in the Description page of Project Settings.

#include "SSlAiMenuHUDWidget.h"
#include "SlateOptMacros.h"
#include "SButton.h"

BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
void SSlAiMenuHUDWidget::Construct(const FArguments& InArgs)
{
	//创建按钮:
	//中括号是UE4的重载运算符,不是数组符号,
	ChildSlot
		[
			SNew(SButton)
		];
}
END_SLATE_FUNCTION_BUILD_OPTIMIZATION

 

③运行:可以看到按钮占据了整个屏幕,所以添加按钮是全屏的

UE4纯C++与Slate开发沙盒游戏:2.添加Slate到界面_第46张图片

 

你可能感兴趣的:(UE4,#)