ue4-HUD绘制UI(C++)
HUD绘制UI,其他绘制相关的接口看源码就可以使用了
- 创建继承自AHUD的c++类-AMyHUD,构造函数中加载一些资源 - MyHUD.h - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28- 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 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 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);
 }
 
- 资源路径 
  
- 构造中加载直接就可以在编辑器中看到 
 