Unreal Engine 4 C++ Slate 介绍——Hello Slate

Unreal Eegine 4 C++ Slate 介绍——Hello Slate

好记性不如烂笔头啊,还是记录一下!


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

本教程需要对C++和事件驱动系统有一定的了解。本教程会对于如何添加HUD并且渲染一个Slate窗口做一个基本的介绍,Slate窗口会显示一个消息为“Hello, Slate!”的文本框。除了这些,需要几个步骤去设置工程才能处理Slate窗口。这里做的一些事情对有经验的人来说显得有些直白,但是这些事情对那些刚开始接触的人并不是很明白,所以还是有必要讲一下。

创建一个工程

创建一个工程,并且创建以下文件:

  • StandardHUD.h
  • StandardHUD.cpp
  • StandardSlateWidget.h
  • StandardSlateWidget.cpp

StandardHUD类需要继承自HUD类,StandardSlateWidget类需要继承自CompoundWidget类(这个列表里选不到,创建个空白的C++类,后续有修改方法)

修改工程配置增加Slate的依赖项

打开你创建的项目的配置文件(<你的项目名称>.Build.cs),取消以下行的注释,并修改成这样:

PrivateDependencyModuleNames.AddRange(
    new string[] {
        "Slate",
        "SlateCore"
    }
);

保存关闭后,需要重新编译你的工程。

编写代码

现在我们的工程里有4个文件,现在都是空的,下面是每个文件的代码。StandardHUD类基本上和HUD类是一样的。StandardSlateWidget是我们自定的控件,这是我们要显示文本的地方。

现在我们的代码文件为:

  • StandardHUD.h
  • StandardHUD.cpp
  • StandardSlateWidget.h
  • StandardSlateWidget.cpp

他们的代码分别为:

  • StandardHUD.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "GameFramework/HUD.h"
#include "StandardHUD.generated.h"

class SStandardSlateWidget;

UCLASS()
class AStandardHUD : public AHUD
{
    GENERATED_BODY()
public:
    AStandardHUD();

    
    /Reference to an SCompoundWidget, TSharedPtr adds to the refcount of MyUIWidget
    /MyUIWidget will not self-destruct as long as refcount > 0
    /MyUIWidget refcount will be (refcout-1) if HUD is destroyed.
    TSharedPtr<SStandardSlateWidget> MyUIWidget;

    
    /Called as soon as game starts, create SCompoundWidget and give Viewport access
    void BeginPlay();
};
  • StandardHUD.cpp
// Fill out your copyright notice in the Description page of Project Settings.

#include "HelloSlate.h"
#include "StandardSlateWidget.h"
#include "StandardHUD.h"

AStandardHUD::AStandardHUD()
{

}

void AStandardHUD::BeginPlay()
{
    
    /So far only TSharedPtr<SMyUIWidget> has been created, now create the actual object.
    /Create a SMyUIWidget on heap, our MyUIWidget shared pointer provides handle to object
    /Widget will not self-destruct unless the HUD's SharedPtr (and all other SharedPtrs) destruct first.
    MyUIWidget = SNew(SStandardSlateWidget).OwnerHUD(this);

    
    /Pass our viewport a weak ptr to our widget
    /Viewport's weak ptr will not give Viewport ownership of Widget
    GEngine->GameViewport->AddViewportWidgetContent(SNew(SWeakWidget).PossiblyNullContent(MyUIWidget.ToSharedRef()));

    
    /Set widget's properties as visible (sets child widget's properties recursively)
    MyUIWidget->SetVisibility(EVisibility::Visible);
}
  • StandardSlateWidget.h
//Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.

#pragma once
#include "StandardHUD.h"
#include "SlateBasics.h"

class SStandardSlateWidget : public SCompoundWidget
{
    SLATE_BEGIN_ARGS(SStandardSlateWidget)
    {
    }

    /* 参照下面的OwnerHUD的声明 */
    SLATE_ARGUMENT(TWeakObjectPtr<class AStandardHUD>, OwnerHUD)

    SLATE_END_ARGS()

public:

    
    / 每一个控件都必须要有这个函数
    / 构建控件及其子控件
    void Construct(const FArguments& InArgs);

private:

    
    / 指向控件的持有者Hud
    / 使用弱引用持有HUD的指针,因为HUD是使用强引用来持有Widget的。
    / 如果双方都为强引用的话将会导致解构时形成循环引用并引发内存泄露
    TWeakObjectPtr<class AStandardHUD> OwnerHUD;
};
  • StandardSlateWidget.cpp
#include "HelloSlate.h"
#include "StandardSlateWidget.h"
#include "StandardHUD.h"

#define LOCTEXT_NAMESPACE "SStandardSlateWidget"

void SStandardSlateWidget::Construct(const FArguments& InArgs)
{
    OwnerHUD = InArgs._OwnerHUD;

    
    /If the code below doesn't look like C++ to you it's because it (sort-of) isn't,
    /Slate makes extensive use of the C++ Prerocessor(macros) and operator overloading,
    /Epic is trying to make our lives easier, look-up the macro/operator definitions to see why.
    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(-1, 1))
                        .Font(FSlateFontInfo("Veranda", 16))
            .Text(LOCTEXT("HelloSlate", "Hello, Slate!"))
        ]
    ];
}

#undef LOCTEXT_NAMESPACE

现在你可以重新编译下你的工程,你会发现屏幕中间并没有显示任何东西,因为在游戏模式中并没有把我们的HUD设置为默认的。

在你的游戏模式的文件中(*GameMode.cpp)中,在构造函数中添加这行代码:

HUDClass = AStandardHUD::StaticClass();

再次编译会发现屏幕上有了一行文字:

示例

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 学习使用虚幻引擎4构建游戏的方式是通过实践编写游戏来学习C语言。虚幻引擎4是一种强大的游戏开发工具,提供了丰富的功能和工具,方便开发者进行游戏开发。 通过使用虚幻引擎4作为学习工具,学生可以将编写代码与实际游戏开发结合起来,加深对C语言的理解。从创建游戏场景、添加角色和物体、设计游戏逻辑等方面进行实际编码,可以使学生更好地理解编程概念和语法。 使用虚幻引擎4进行游戏开发还可以激发学生的创造力和想象力。学生可以利用引擎中丰富的资源库,包括各种角色、场景和音效,来创建自己的游戏世界。他们可以设计自己的游戏规则和关卡,实现自己的游戏想法。 此外,通过构建游戏,学生还可以学习到游戏开发的整个流程,包括项目管理、协作和测试等方面。他们将面临各种开发挑战,并学会解决问题和调试代码。 总之,通过使用虚幻引擎4构建游戏来学习C语言,学生不仅能够掌握编程技巧,还能在创意和设计方面得到锻炼。这种学习方式不仅能够提高学生的编程能力,还能激发他们对游戏开发的兴趣,并为未来进一步深入学习游戏开发打下坚实的基础。 ### 回答2: 《通过使用虚幻引擎4构建游戏学习C语言》是一本教你如何通过使用虚幻引擎4来构建游戏并学习C语言的书籍。这个教程从基础知识开始,向读者介绍C语言的基本概念、语法和编程原则。通过学习这本书,读者可以了解如何使用C语言来开发虚幻引擎4中的游戏。 这本书以构建游戏作为学习C语言的主题是非常巧妙的。通过实际动手的方式,读者可以将理论知识应用到实践中,加深对C语言的理解和掌握。而虚幻引擎4作为一款流行的游戏开发引擎,具有强大的功能和广泛的应用,将帮助读者更好地理解C语言在游戏开发中的应用。 本书的内容涵盖了虚幻引擎4的基本概念和工具,包括游戏世界的创建、角色控制、动画效果、碰撞检测等。读者将学习如何使用C语言编写代码来实现这些功能,并通过实际示例进行实践。通过阅读和完成书中的练习,读者将逐步提高他们的编程技能,并对游戏开发有更深入的了解。 这本书还适合那些有一定编程基础但想扩展他们的技能并进一步了解游戏开发的读者。通过结合C语言和虚幻引擎4,读者将能够学习到如何开发高质量和功能强大的游戏。同时,本书也提供了许多实用的技巧和建议,帮助读者解决在游戏开发过程中可能遇到的问题。 总之,通过使用虚幻引擎4构建游戏来学习C语言是一种创新和有趣的方式。这本书不仅能够帮助读者系统地学习C语言的知识,还能让他们在实践中提高自己的编程技能。无论是对于初学者还是有经验的开发者来说,这本书都是一个值得推荐的资源。 ### 回答3: 通过使用虚幻引擎4构建游戏学习C语言 《通过使用虚幻引擎4构建游戏学习C语言》是一本教程式书籍,旨在帮助读者通过动手实践游戏开发来学习C语言。本书借助强大的虚幻引擎4提供的开发环境,让读者能够充分了解和掌握C语言的相关知识。 通过构建游戏来学习C语言具有多重优势。首先,游戏开发是一个非常具有趣味性的项目。与枯燥的理论学习相比,通过动手实践游戏开发,读者可以更好地专注于学习过程,更易于融会贯通。其次,虚幻引擎4是一款广泛应用于游戏开发的强大软件,它提供了丰富的功能和工具,帮助读者更好地理解和应用C语言。 在这本书中,读者将逐步了解C语言的基础知识,并学习如何在虚幻引擎4中应用这些知识来构建游戏。书中通过一系列的实例和案例,引导读者学习如何使用C语言编写游戏逻辑和脚本,如何创建人物角色、场景和动画等。读者将掌握如何使用虚幻引擎4的资源管理系统、物理引擎和图形渲染技术等关键功能,以及如何在游戏中实现交互、音效和视觉效果。 通过学习C语言,读者将能够理解计算机编程的基本原理和概念,并掌握一种常用的编程语言。而通过结合虚幻引擎4的游戏开发,读者将更深入地了解游戏设计和开发的流程,同时也可以提升自己在游戏开发领域的技能和竞争力。 总而言之,《通过使用虚幻引擎4构建游戏学习C语言》是一本既有趣又实用的教材,它为想要学习C语言并对游戏开发感兴趣的读者提供了一个很好的机会和平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值