1、新建项目
本教程基于Wiki中的“Slate, Hello”项目作为引导。
1、新建空白蓝图项目,命名为HelloSlate:
2、使用类向导,添加一个HUD类,命名为“StandardHUD”:
3、再添加一个Slate控件类,命名为“StandardSlateWidget”:
4、添加模块依赖,打开HelloSlate.Build.cs,取消注释如下代码:
// Uncomment if you are using Slate UI
PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
此后最好刷新一下项目:
2、编写代码
HUD类
StandardHUD.h:
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/HUD.h"
#include "StandardHUD.generated.h"
UCLASS()
class HELLOSLATE_API AStandardHUD : public AHUD
{
GENERATED_BODY()
public:
TSharedPtr<class SStandardSlateWidget> MyUIWidget;
virtual void BeginPlay() override;
};
StandardHUD.cpp:
#include "StandardHUD.h"
#include "SStandardSlateWidget.h"
#include "Engine/Engine.h"
#include "Engine/GameViewportClient.h"
#include "DeclarativeSyntaxSupport.h"
#include "Widgets/SWeakWidget.h"
void AStandardHUD::BeginPlay()
{
Super::BeginPlay();
GEngine->GameViewport->AddViewportWidgetContent(
SNew(SWeakWidget)
.PossiblyNullContent(SAssignNew(MyUIWidget, SStandardSlateWidget))
);
}
Slate控件类
SStandardSlateWidget.h:
#pragma once
#include "CoreMinimal.h"
#include "Widgets/SCompoundWidget.h"
#include "DeclarativeSyntaxSupport.h"
class HELLOSLATE_API SStandardSlateWidget : public SCompoundWidget
{
public:
SLATE_BEGIN_ARGS(SStandardSlateWidget)
{}
SLATE_END_ARGS()
/** Constructs this widget with InArgs */
void Construct(const FArguments& InArgs);
};
SStandardSlateWidget.cpp:
#include "SStandardSlateWidget.h"
#include "SlateOptMacros.h"
#include "Widgets/Text/STextBlock.h"
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
void SStandardSlateWidget::Construct(const FArguments& InArgs)
{
ChildSlot
[
SNew(STextBlock)
.Font(FSlateFontInfo("Veranda", 100))
.Text(NSLOCTEXT("HelloSlate", "HelloSlateText", "Hello, Slate!"))
];
}
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
3、查看效果
编译项目,添加一个GameMode蓝图类命名为“HelloSlateGameMode”,设置其HUD Class为:StandardHUD
并添加以下蓝图节点以显示光标:
打卡世界设置,将GameModeOverride设置为刚才新建的GameMode:
点击运行,即可看到效果: