概述

距离上次记录《UE4之Slate:纯C++工程配置》后已经好长时间了;

这个随笔来记录并分享一下SImage控件的使用,以在屏幕上显示一张图片;

目标

通过SImage控件的展示,学习Slate最基础的API使用

图文步骤

新建的C++工程,VS解决方案中,源码结构如下图:

        图1:新建C++工程源码结构

新建一个C++ HUD类:

双击打开新建的工程文件:HelloSlate.uproject;这里使用编辑器的New C++ Class向导来添加HUD类;

编辑器菜单中:File->New C++ Class打开添加C++类向导界面;

勾选【Show All Class】,并在搜索栏中输入HUD,选中HUD作为父类;如图:

                图2:选择HUD作为父类

点击【Next】,这里类名设为HelloSlateHUD,其他的保持默认,然后点击【Create Class】,如图:

                图3:自定义HUD的类名

新的C++ HUD类创建后,VS工程会自动刷新并出现在VS的解决方案中,如下图:

       图4:新建HelloSlateHUD后,VS源码结构

设置以使用自定义的HUD C++类

打开HelloSlateGameModeBase.h和HelloSlateGameModeBase.cpp源文件:

1 UCLASS()
2 class HELLOSLATE_API AHelloSlateGameModeBase : public AGameModeBase
3 {
4 GENERATED_BODY()
5 public:
6 AHelloSlateGameModeBase(const FObjectInitializer& ObjectInitializer); // 添加构造函数
7 };
1 #include "HelloSlateGameModeBase.h"
2 #include "HelloSlateHUD.h" // 包含新建的HUD头文件
3
4 // 构造函数
5 AHelloSlateGameModeBase::AHelloSlateGameModeBase(const FObjectInitializer& ObjectInitializer):
6 Super::AGameModeBase(ObjectInitializer)
7 {
8 HUDClass = AHelloSlateHUD::StaticClass(); // 设置为自定义的HUD C++类
9 }

因为工程使用空模板创建的,这里需要配置一下关卡:
1、Content中创建Maps目录

2、保存当前当前关卡到Maps目录下,命名为HelloSlate

3、设置当前关卡的GameMode为HelloSlateGameModeBase类
具体如图:

                图5:关卡配置,以使用自定义的GameMode,进而使HelloSlateHUD生效

点击Play按钮,在Output Log中应该能看到“AHelloSlateHUD::BeginPlay()”Log输出;

显示图片

VS打开HelloSlateHUD.cpp源码,包含必要的头文件引用并修改后如下:

 1 #include "HelloSlateHUD.h"
2 #include "Slate.h"
3 #include "Engine.h"
4
5 // 实现Actor的BeginPlay方法
6 void AHelloSlateHUD::BeginPlay()
7 {
8 Super::BeginPlay(); // 调用父类方法
9 UE_LOG(LogTemp, Warning, TEXT("AHelloSlateHUD::BeginPlay()"));
10
11 // 显示一个引擎自带的图片
12 if (GEngine && GEngine->GameViewport)
13 {
14 const FSlateBrush* icon = FCoreStyle::Get().GetBrush(TEXT("TrashCan"));
15 GEngine->GameViewport->AddViewportWidgetContent(SNew(SOverlay)
16 + SOverlay::Slot()
17 .HAlign(HAlign_Left)
18 .VAlign(VAlign_Top)
19 [
20 SNew(SImage)
21 .Image(icon)
22 ]
23 );
24 }
25 }

编译后在编辑器中Play,在游戏界面的左上角会显示一个垃圾桶图片;如图:

                图6:运行效果

上述代码:

先是创建一个SOverlay对象;

再创建SImage对象,加到SOverlay Panel中,并设置水平、竖直方向的布局参数;

SOverlay对象最终通过GEngine->GameViewport->AddViewportWidgetContent(...)添加到“游戏画布”中

GameViewport是UGameViewportClient类的实例,有兴趣可以追一下源码;后面有时间再详述;

const FSlateBrush* icon取了引擎默认的资源,FSlateBrush、FCoreStyle后面涉及到渲染在聊;

对于当前的展示案例,这些暂时可以不用深究;

上述代码中的SNew宏和+ 、[]等操作符,可以参考下面这个文章:

UE4 Slate 特殊语法

结尾

以如何在界面上显示一个Image为例,详细的记录下C++中使用Slate最基础的流程;
以Step by step的这种方式,结合一些参考文章以及多些尝试,希望能带给UE4新手一些帮助。

UE4之Slate: SImage的更多相关文章

  1. UE4之Slate:App默认窗口的创建流程

    UE4版本:4.24.3源码编译 Windows10 + VS2019开发环境 在先前分享的基础上,现在来梳理下App启动时默认窗口的创建流程,以及相关的类.对象之间的抽象层级: 纯C++工程配置 S ...

  2. UE4.25 Slate源码解读

    概述 Slate系统是UE的一套UI解决方案,UMG系统也是依赖Slate系统实现的. 问题: Slate系统是如何组织的? 控件树的父子关系是如何绑定的? Slate系统是如何渲染的? slate渲 ...

  3. UE4之Slate: App启动与最外层Runtime结构

    UE4版本:4.24.3源码编译: Windows10 + VS开发环境 Slate为一套自定义UI框架,其绘制直接依赖的是OpenGL.DirectX这样的硬件加速AIP;可以理解为一个单独的2D图 ...

  4. UE4之Slate:纯C++工程配置

    概述: Slate是UE4提供的UI框架,整个UE4 Editor UI都是使用Slate构建的: Slate的官方文档:[Slate UI框架] Slate底层内容,中文环境下能搜索到的有效资源也不 ...

  5. 【UE4 C++】学习笔记汇总

    UE4 概念知识 基础概念--文件结构.类型.反射.编译.接口.垃圾回收.序列化[导图] GamePlay架构[导图] 类的继承层级关系[导图] 反射机制 垃圾回收机制/算法 序列化 Actor 的生 ...

  6. 【UE4 C++】Slate 初探: Editor UI 与 Game UI

    概述 名词区分 Slate Slate 是完全自定义.与平台无关的UI框架 应用 可用于编辑器UI,编辑器的大部分界面都是使用 Slate 构建的 可做为游戏UI 可作为独立应用开发 只能 C++ 开 ...

  7. UE4 Slate控件之TreeView 使用例子(一)

    TreeView例子 先从Contruct中往子Slot添加Widget,先声明指向STreeView的指针,后续方便进行视图的一些操作 TSharedPtr<STreeView<TSha ...

  8. 《Inside UE4》目录

    <Inside UE4>目录 InsideUE4 UE4无疑是非常优秀的世界上最顶尖的引擎之一,性能和效果都非常出众,编辑器工作流也非常的出色,更难得宝贵的是完全的开源让我们有机会去从中吸 ...

  9. UE4入门与精通

    由于目前在使用UE4引擎,多少也有一些心得,比如在日常使用中会遇到一些问题.坑(潜规则)或者一些使用技巧等.本人决定开一个大坑,主要有两个目的:一是可以自己做个记录,二是可以给大家提供一些参考吧.主要 ...

随机推荐

  1. 关于评论区empty。。。

    空荡荡的毫无人烟,博主希望路过的小哥哥/小姐姐(几率较小)留下些什么--

  2. Qt字符编码小知识

    1.VS2010默认编码是GBK,Qt5的内置编码是utf-8,想要在VS2010及其以上版本,优雅的使用utf-8的字符编码需要 // Coding: UTF-8(BOM) #if defined( ...

  3. C++实现红黑树

    红黑树的应用: 利用key_value对,快速查找,O(logn) socket与客户端id之间,形成映射关系(socket, id) 内存分配管理 一整块内存,不断分配小块 每分配一次,就加入到红黑 ...

  4. 有向路径检查 牛客网 程序员面试金典 C++ Python

    有向路径检查 牛客网 程序员面试金典 C++ Python 题目描述 对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径. 给定图中的两个结点的指针DirectedGraphNode* a, ...

  5. Java安全之Thymeleaf SSTI分析

    Java安全之Thymeleaf SSTI分析 写在前面 文章首发:https://www.anquanke.com/post/id/254519 最近看了一遍Thymeleaf,借此机会学习一下Th ...

  6. 【python】使用python十分钟创建个人聊天机器人教程

    以青云客和图灵机器人接口示范python创建个人聊天机器人教程 一.以青云客聊天机器人为例示范get请求 官方网址:http://api.qingyunke.com/ 1.接入指引 请求地址 http ...

  7. Java学习(二十二)

    学了一个在css中叫font的样式: 感觉还是挺好用的 不过要注意如果把font放在最后,其他会使用默认值,可能会覆盖掉前面的 例如新学的行高 在font中语法是 font:30px/40px &qu ...

  8. 简单的SQl时间序列生成,每次时间间隔10分钟。

    create table #timeseries(Times datetime not null) go declare @firstdate datetime , @lastdate datetim ...

  9. Linux基础三:用户和组

    三.用户和组 1.概念 (1).用户概念: 用户是用来运行某一些进程.拥有某一些文件或目录. 在Linux里面,用户分成三大类:root用户.系统用户.普通用户. 用户是用UID来唯一标识身份的,且r ...

  10. Django笔记&教程 0-2 框架版本与相关工具

    Django 自学笔记兼学习教程第0章第2节-- 框架版本与相关工具 点击查看教程总目录 1 版本 python: 3.6.5 Django: 2.2.11 (有些地方我也会对比下各种版本的区别) 安 ...