ue4-HUD绘制UI(C++)

来源:互联网 发布:origin多组数据作图 编辑:程序博客网 时间:2024/05/29 16:47

HUD绘制UI,其他绘制相关的接口看源码就可以使用了


  1. 创建继承自AHUD的c++类-AMyHUD,构造函数中加载一些资源

    • MyHUD.h

      UCLASS()class MYQWE_API AMyHUD : public AHUD{    GENERATED_UCLASS_BODY()public:    virtual void    DrawHUD() override; //重写父类的绘制函数    void            DrawMyIcons(); //绘制图片    void            DrawMyItems(); //绘制文字    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyHUD")        UTexture2D* mTexture2d;    float       mScaleFactor;    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyHUD")        FCanvasIcon mIcons1;    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyHUD")        FCanvasIcon mIcons2;    UTexture2D* mTextureArrowDown;    UTexture2D* mTextureArrowLeft;    FCanvasIcon mAllIcons[2];    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyHUD")        UFont*          mFont;};
    • MyHUD.cpp

      #include "Engine/StreamableManager.h"AMyHUD::AMyHUD(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer){    //加载资源方式1    FStreamableManager* stream = new FStreamableManager();    FStringAssetReference ref(TEXT("/Game/UI/bb"));    mTexture2d = Cast<UTexture2D>(stream->SynchronousLoad(ref));    //加载资源方式2    static ConstructorHelpers::FObjectFinder<UTexture2D> TextureArrowDownOb(TEXT("/Game/UI/Arrow_Down_1"));    static ConstructorHelpers::FObjectFinder<UTexture2D> TextureArrowLeftOb(TEXT("/Game/UI/Arrow_Left_2"));    mTextureArrowDown = TextureArrowDownOb.Object;    mTextureArrowLeft = TextureArrowLeftOb.Object;    //四个float理解为Rect即可,只不过表示的是贴图中的uv坐标,而不是坐标系中xy坐标    //以像素为单位,而不是uv中的范围0-1    mAllIcons[0] = UCanvas::MakeIcon(mTextureArrowDown, 0, 0, 60, 60);    mAllIcons[1] = UCanvas::MakeIcon(mTextureArrowLeft, 0, 0, 60, 60);    mIcons1 = mAllIcons[0];    mIcons2 = mAllIcons[1];    //加载字体    static ConstructorHelpers::FObjectFinder<UFont> FontOb(TEXT("/Game/UI/Roboto51"));    mFont = FontOb.Object;}void AMyHUD::DrawHUD(){    Super::DrawHUD();    if (!Canvas)        return;    mScaleFactor = Canvas->ClipY / 1080.0f;    DrawMyIcons();    DrawMyItems();    Canvas->DrawText(mFont, FString(TEXT("--- DrawText")), 150.f, 150.f);}void AMyHUD::DrawMyIcons(){    const float StartX = Canvas->ClipX / 2.0f;    const float StartY = Canvas->ClipY / 2.0f;    for (size_t i = 0; i < 2; i++)    {        //使用Canvas绘制icon        Canvas->DrawIcon(mAllIcons[i], StartX + 100 * i, StartY + 100 * i, mScaleFactor);    }}void AMyHUD::DrawMyItems(){    FCanvasTextItem textItem = FCanvasTextItem(FVector2D::ZeroVector, FText::GetEmpty(), mFont, FLinearColor::Red);    textItem.Text = FText::FromString(TEXT("--- TextItem String!"));    Canvas->DrawItem(textItem, 300.f, 300.f);}
  2. 资源路径
    这里写图片描述

  3. 构造中加载直接就可以在编辑器中看到
    这里写图片描述

0 0