使用HUD创建准星UI


  我们的第一人称模板UI上最基础的就是我们的瞄准用的准星,而这个准星的创建我们使用了HUD类,而在这个HUD中,我们需要重写一个DrawHUD绘制函数。

  在FirstProjectHUD.h中:


    public:
        // 构造函数
        AFirstProjectHUD();

        // 重写绘制函数
        virtual void DrawHUD() override;

    private:
        // 准星图片资源
        class UTexture2D* CrosshairTex;
						

  在FirstProjectHUD.cpp中:


    AFirstProjectHUD::AFirstProjectHUD(){
        // 设置准星图片
        static ConstructorHelpers::FObjectFinder CrosshairTexObj(TEXT("/Game/FirstPerson/Textures/FirstPersonCrosshair"));
        CrosshairTex = CrosshairTexObj.Object;
    }

    void AFirstProjectHUD::DrawHUD(){
        Super::DrawHUD();

        // 绘制在屏幕中心位置
        const FVector2D Center(Canvas->ClipX * 0.5f, Canvas->ClipY * 0.5f);

        // 相对于中心位置的偏移量,即Y轴向上偏移20像素
        const FVector2D CrosshairDrawPosition( (Center.X),(Center.Y + 20.0f));

        // 开始绘制,传入的参数为绘制的位置,绘制的贴图资源,颜色
        FCanvasTileItem TileItem( CrosshairDrawPosition, CrosshairTex->Resource, FLinearColor::White);
        // 设置为半透明
        TileItem.BlendMode = SE_BLEND_Translucent;
        将这个“绘制”显示出来
        Canvas->DrawItem( TileItem );
    }
						

  最后,我们只需在GameMode下指定这个HUD即可。