2015年8月30日0

文章目录 [隐藏]

  • 1 准备工作
  • 2 SlateWidget
  • 3 HUD
  • 4 最终结果

UE4中通常的游戏内逻辑使用UMG就可以了,当需要一些独特的功能时就会需要用到Slate。

当前UE4版本4.8.3。

Slate是UE4的用户界面系统,UE4编辑器的大部分界面都是由Slate构建的。同时,在编辑器中使用的UMG也是在Slate的基础上封装的。

本文参照官方社区文档Slate, Hello完成。

准备工作

要使用Slate,第一步是将其API开放到项目。在项目对应的Build.cs中将下面的代码的注释去掉即可

1
2
3

// Uncomment if you are using Slate UI
PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

根据UE4版本的不同如果没有这行的直接加上就好了。

SlateWidget

创建用于显示文字的Slate控件。

Slate控件的一些特殊的宏和界面定义方式的详情可以参考官方的Slate概述。

StandardSlateWidget.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

#pragma once
#include "Test_mp.h" /* <项目头文件 */
class SStandardSlateWidget : public SCompoundWidget
{
    SLATE_BEGIN_ARGS(SStandardSlateWidget){}
    /* <参照下面的OwnerHUD的声明 */
    SLATE_ARGUMENT(TWeakObjectPtr<class AHUD>, OwnerHUD)
    SLATE_END_ARGS()
public:
    
    / <每一个控件都必须要有这个函数
    / <构建控件及其子控件
    void Construct(const FArguments& InArgs);
private:
    
    / <指向控件的持有者Hud
    / <使用弱引用持有HUD的指针,因为HUD是使用强引用来持有Widget的。
    / <如果双方都为强引用的话将会导致解构时形成循环引用并引发内存泄露
    TWeakObjectPtr<class AHUD> OwnerHUD;
};

StandardSlateWidget.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

#include "Test_mp.h"
#include "Plugin/StandardSlateWidget.h"
void SStandardSlateWidget::Construct(const FArguments& InArgs)
{
    OwnerHUD = InArgs._OwnerHUD;
    ChildSlot
        .VAlign(VAlign_Fill)
        .HAlign(HAlign_Fill)
        [
            SNew(SOverlay)
            + SOverlay::Slot()
            .VAlign(VAlign_Top)
            .HAlign(HAlign_Center)
             [
                 SNew(STextBlock)
                 .ShadowColorAndOpacity(FLinearColor::Black)
                 .ColorAndOpacity(FLinearColor::Red)
                 .ShadowOffset(FIntPoint(-5, 5))
                 .Font(FSlateFontInfo("Veranda", 24))
                 .Text(FText::FromString("Hello, Slate!"))
             ]
        ];
}

在这里使用OwnerHUD并不是必须的,主要的作用是作为参数传递的示范。

HUD

通过自定义一个HUD用于Slate控件的展示。添加HUD代码没有什么特殊的地方。

添加好之后直接在BeginPlay中将Widget输出到屏幕即可。

StandardHud.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#pragma once
#include "GameFramework/HUD.h"
#include "StandardHUD.generated.h"
class SStandardSlateWidget;
UCLASS()
class AStandardHUD : public AHUD
{
    GENERATED_BODY()
public:
    AStandardHUD();
    TSharedPtr<SStandardSlateWidget> myUIWidget;
    void BeginPlay();
};

StandardHud.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

// Fill out your copyright notice in the Description page of Project Settings.
#include "Test_mp.h"
#include "Plugin/StandardSlateWidget.h"
#include "Plugin/StandardHUD.h"
AStandardHUD::AStandardHUD()
{
}
void AStandardHUD::BeginPlay()
{
    SAssignNew(myUIWidget, SStandardSlateWidget).OwnerHUD(this);
    if (GEngine->IsValidLowLevel())
    {
        GEngine->GameViewport->AddViewportWidgetContent(SNew(SWeakWidget).PossiblyNullContent(myUIWidget.ToSharedRef()));
    }
    if (myUIWidget.IsValid())
    {
        myUIWidget->SetVisibility(EVisibility::Visible);
    }
}

最终结果

原始的教程中还有自定义GameMode的部分,在这里就不执行了。直接在编辑器中将HUD指定为刚刚定义的StandardHud即可。

点击运行即可在屏幕上方看到“Hello, Slate!”的文字输出了。

UE4 | Slate
本文链接地址: Hello Slate
本博客所有内容遵循CC BY-NC-SA 3.0协议:

如有转载,请注明出处。

2015年8月30日0

文章目录 [隐藏]

  • 1 准备工作
  • 2 SlateWidget
  • 3 HUD
  • 4 最终结果

UE4中通常的游戏内逻辑使用UMG就可以了,当需要一些独特的功能时就会需要用到Slate。

当前UE4版本4.8.3。

Slate是UE4的用户界面系统,UE4编辑器的大部分界面都是由Slate构建的。同时,在编辑器中使用的UMG也是在Slate的基础上封装的。

本文参照官方社区文档Slate, Hello完成。

准备工作

要使用Slate,第一步是将其API开放到项目。在项目对应的Build.cs中将下面的代码的注释去掉即可

1
2
3

// Uncomment if you are using Slate UI
PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

根据UE4版本的不同如果没有这行的直接加上就好了。

SlateWidget

创建用于显示文字的Slate控件。

Slate控件的一些特殊的宏和界面定义方式的详情可以参考官方的Slate概述。

StandardSlateWidget.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

#pragma once
#include "Test_mp.h" /* <项目头文件 */
class SStandardSlateWidget : public SCompoundWidget
{
    SLATE_BEGIN_ARGS(SStandardSlateWidget){}
    /* <参照下面的OwnerHUD的声明 */
    SLATE_ARGUMENT(TWeakObjectPtr<class AHUD>, OwnerHUD)
    SLATE_END_ARGS()
public:
    
    / <每一个控件都必须要有这个函数
    / <构建控件及其子控件
    void Construct(const FArguments& InArgs);
private:
    
    / <指向控件的持有者Hud
    / <使用弱引用持有HUD的指针,因为HUD是使用强引用来持有Widget的。
    / <如果双方都为强引用的话将会导致解构时形成循环引用并引发内存泄露
    TWeakObjectPtr<class AHUD> OwnerHUD;
};

StandardSlateWidget.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

#include "Test_mp.h"
#include "Plugin/StandardSlateWidget.h"
void SStandardSlateWidget::Construct(const FArguments& InArgs)
{
    OwnerHUD = InArgs._OwnerHUD;
    ChildSlot
        .VAlign(VAlign_Fill)
        .HAlign(HAlign_Fill)
        [
            SNew(SOverlay)
            + SOverlay::Slot()
            .VAlign(VAlign_Top)
            .HAlign(HAlign_Center)
             [
                 SNew(STextBlock)
                 .ShadowColorAndOpacity(FLinearColor::Black)
                 .ColorAndOpacity(FLinearColor::Red)
                 .ShadowOffset(FIntPoint(-5, 5))
                 .Font(FSlateFontInfo("Veranda", 24))
                 .Text(FText::FromString("Hello, Slate!"))
             ]
        ];
}

在这里使用OwnerHUD并不是必须的,主要的作用是作为参数传递的示范。

HUD

通过自定义一个HUD用于Slate控件的展示。添加HUD代码没有什么特殊的地方。

添加好之后直接在BeginPlay中将Widget输出到屏幕即可。

StandardHud.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#pragma once
#include "GameFramework/HUD.h"
#include "StandardHUD.generated.h"
class SStandardSlateWidget;
UCLASS()
class AStandardHUD : public AHUD
{
    GENERATED_BODY()
public:
    AStandardHUD();
    TSharedPtr<SStandardSlateWidget> myUIWidget;
    void BeginPlay();
};

StandardHud.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

// Fill out your copyright notice in the Description page of Project Settings.
#include "Test_mp.h"
#include "Plugin/StandardSlateWidget.h"
#include "Plugin/StandardHUD.h"
AStandardHUD::AStandardHUD()
{
}
void AStandardHUD::BeginPlay()
{
    SAssignNew(myUIWidget, SStandardSlateWidget).OwnerHUD(this);
    if (GEngine->IsValidLowLevel())
    {
        GEngine->GameViewport->AddViewportWidgetContent(SNew(SWeakWidget).PossiblyNullContent(myUIWidget.ToSharedRef()));
    }
    if (myUIWidget.IsValid())
    {
        myUIWidget->SetVisibility(EVisibility::Visible);
    }
}

最终结果

原始的教程中还有自定义GameMode的部分,在这里就不执行了。直接在编辑器中将HUD指定为刚刚定义的StandardHud即可。

点击运行即可在屏幕上方看到“Hello, Slate!”的文字输出了。

UE4 | Slate
本文链接地址: Hello Slate
本博客所有内容遵循CC BY-NC-SA 3.0协议:

如有转载,请注明出处。

UE4 Hello Slate相关推荐

  1. UE4 创建自定义 Slate UI 控件

    UE4 创建自定义 Slate UI 控件 文章目录 UE4 创建自定义 Slate UI 控件 前言 一.什么是 Slate 二.创建自己的 Slate 控件 1.模块引用 2.定义 Slate 控 ...

  2. 【UE4 C++】博客目录 / 学习笔记汇总

    UE4 概念知识 基础概念:文件结构.类型.反射.编译.接口.垃圾回收.序列化[导图] GamePlay架构[导图] 类的继承层级关系[导图] Actor 的生命周期[官方文档] 虚幻引擎运行流程 渲 ...

  3. 3Ds Max基础(杂)

    写在前面 阅读本文,你几乎不会有什么收获 主要是MaxScript语法基础.工具.Max的fx shader 换电脑了,10700F果然比6300HQ编译快亿点 UE4的Slate真难用,幸亏有Det ...

  4. [UE4]UMG、HUI、Slate之间的区别

    原文: https://answers.unrealengine.com/questions/208916/umg-hud-slate.html HUD Canvas is something tha ...

  5. UE4 Slate四 SlateUI如何做动画

    原创文章,转载请注明出处. 点击观看上一篇<UE4 Slate三 SlateUI代码讲解> 点击观看下一篇<UE4 Slate五 SlateUI如何自定义样式(Custom Styl ...

  6. UE4中HUD、UMG、Slate之间的区别

    这是目录 Slate UMG HUD Slate Slate是为编辑器专门制作的窗口UI框架(以前的UE编辑器使用了Window的库),但它也可以用在游戏中. 但是Slate类不在UObject环境之 ...

  7. UE4插件与编辑器Slate

    教程使用软件:Visual Studio2017 .UE4 4.20和4.19版本引擎 UE4插件与编辑器Slate源文链接 哈喽,大家好,我叫人宅,很高兴和大家分享一下我们这套教程. 我们的UE4课 ...

  8. UE4 Slate九 控件反射器Widget Reflector介绍

    原创文章,转载请注明出处. 点击观看上一篇<UE4 Slate八 SlateUI使用总结> 点击观看下一篇<UE4 Slate十 SlateViewer介绍> 虚幻引擎 Sla ...

  9. UE4 Slate独立引用程序(摘抄大象无形)

    UE4 Slate独立引用程序(摘抄大象无形) 简介 如何开始 BlankProgram 走的更远 预先准备 增加模块引用 添加头文件应用 修改Main函数为WinMain 添加LOCTEXT_NAM ...

最新文章

  1. GPUImage滤镜中的shader代码分析,及自定义滤镜
  2. ICML 2020 | 基于连续动态系统学习更加灵活的位置编码
  3. html(5)标签form表单——进阶
  4. 外观模式coding
  5. 陌生人交友IM即时聊天系统-得推交友系统v3.0源码
  6. lt;a href=quot;javascript:history.back();quot;gt;返回上一页lt;/agt;
  7. 服务器端口连通性测试
  8. MacBook Pro 开机密码忘记解决方法
  9. 在Unity Shader中实现漫反射光照模型(逐顶点漫反射光照、逐像素漫反射光照、半兰伯特光照)
  10. siri中文语音助理_针对“语音助手”类产品,浅谈对话式交互设计
  11. csgo星空天空代码_csgo天空背景怎么改
  12. Lr预设(手机+电脑):复古巧克力色电影灯室棕褐色摄影Lightroom滤镜调色预设
  13. 数控恒流源电路简单讲解
  14. 接外包有哪些渠道呢?
  15. ECCV 2022 | 适用于分类,检测,分割的生成式知识蒸馏开源
  16. 【英语学习】【WOTD】arduous 释义/词源/示例
  17. setAttribute 和 getAttribute区别
  18. 使用过的moment对象的用法(至2022/11/03)
  19. 政策更新|9月18日起,产品识别码检查升级
  20. 农夫过河实验报告c语言,农夫过河实验报告.doc

热门文章

  1. 肺功能曲线图怎么看_QQ或将推出已读功能?!你怎么看?| 微博报
  2. 天不知道地知道你不知道我知道谜底_冷门还免费!宝鸡这几个小众红叶观赏地,资深老司机都不一定知道...
  3. 广州大学计算机技术复试c语言试题,广州大学C语言程序设计期末考试试卷含答案...
  4. php切换当前目录,php 改变当前目录函数chdir()的定义与用法实例详解
  5. Linux安装Nessus
  6. c++怎么做app_怎么做一款app
  7. mac 10.12.6 Fiddler的安装
  8. js 判断对象是否是Array
  9. JAVA中JFRAME關閉事件及捕獲
  10. 华为的JAVA面试题及答案(部分)