Appearance
HUD
GameMode里设置HUD
在gamemode里的hud选择我们写的HUD就可以使用了
cpp
// .cpp文件中
Super::DrawHUD(); // HUD类要继承DrawHUD.父类的HUD每次渲染都会进行重置
HUDClass = AMyHUD::StaticClass();
hud的方法不能是私有的
cpp
// .h文件中
protected:
virtual void DrawHUD() override;
// .cpp文件中
DrawText(TEXT("OK"), FLinearColor::Green, 200, 200);
加载字体
cpp
// .h文件中
protected:
virtual void DrawHUD() override;
virtual void BeginPlay() override; // 只要是A类都有BeginPlay()
private:
UPROPERTY()
class UFont* Font; // 只要是U类就得加UPROPERTY(UFUNCTION)
// .cpp文件中
void AMyHUD::DrawHUD()
{
// 绘制文字(两种方式:DrawText绘制, Canvas绘制)
if(Font)
{
// 用DrawText绘制
DrawText(TEXT("OK"), FLinearColor::Green, 200, 200, Font, 5);
// 用Canvas绘制
FText msg = NSLOCTEXT("UE5", "K1", "OK");
Canvas->SetDrawColor(FColor::Red); // 设置Canvas字体颜色
Canvas->DrawText(Font, msg, 200, 100) // 使用Canvas要导入Engine/Canvas.h
}
// Canvas->ClipX; // 屏幕的宽度
// Canvas->ClipY; // 屏幕的高度
}
void AMyHUD::BeginPlay()
{
Font = LoadObject<UFont>(nullptr, TEXT("字体文件路径")); // 字体文件是Font开头
}
绘制不失真的HUD
cpp
if(Font)
{
FText msg = NSLOCTEXT("UE5", "K1", "OK");
FSlateFontInfo Info(Font, 30, "Default"); // 这里用到了Slate。想用Slate必须在项目名.Build.cs中的AddRange()函数中加上Slate和SlateCore
FCanvasTextItem Item(FVector2D(200, 200), msg, Info, FLinearColor::Red);
Canvas->DrawItem(item);
}
绘制贴图
cpp
// .h文件中
UPROPERTY()
class UTexture* Texture;
// .cpp文件中
if(Texture)
{
// DrawTextureSimple(Texture, 0, 0); // Texture在BeginPlay里声明
DrawTexture(Texture, 0, 0, 300, 300, 0, 0, 1, 1);
}
Texture = LoadObject<UTexture>(nullptr, TEXT("图片路径"));
绘制材质球
HUD里只能画userinterface的材质球
cpp
// .h文件中
UPROPERTY()
class UMaterial* Material;
// .cpp文件中
if(Material)
{
// DrawMaterialSimple(Material, 0, 0); // Material在BeginPlay里声明
DrawMaterial(Material, 0, 0, 300, 300, 0, 0, 0.5, 0.5);
}
Material = LoadObject<UMaterial>(nullptr, TEXT("材质路径"));
绘制线
cpp
// .cpp文件中
DrawLine(0, 0, 500, 500, FLinearColor::Red, 5);
Draw3DLine(FVector(0,0,0), FVector(0,0,500), FColor::Red); // FColor用于老API
DrawRect(FLinearColor::Red, 0,0,100,100); // 实心矩形
// 矩形线框
FCanvasBoxItem Item(FVector2D(0,0), FVector2D(300,300));
Item.SetColor(FLinearColor::Green);
Canvas->DrawItem(Item);
获取键盘/鼠标输入事件
cpp
// 从PlayerController里拿
// .h文件中
UPROPERTY()
class APlayerController* pPlayerController;
// .cpp文件中
if(pPlayerController->WasInputKeyJustPressed(EKeys::Q))
{
}
if(pPlayerController->WasInputKeyJustPressed(EKeys::RightMouseButton))
{
pPlayerController->bShowMouseCursor = true;
// pPlayerController->bEnableClickEvents = true; // 设置为true才能响应点击事件
float MouseX = 0; // 局部变量必须初始化
float MouseY = 0;
pPlayerController->GetMousePosition(MouseX, MouseY);
}
pPlayerController = GetWorld()->GetFirstPlayerController(); // BeginPlay()中