Slate完全由C++实现,它的布局与控件的创建只能用C++实现(Slate支持更底层的组件,可以开发更加复杂的功能) UMG是基于Slate封装(Slate的UObject性质的一层封装)可视化编辑器,拓展了很多事件与方法,支持BP Slate使用 1 声明式语法 SLATE_BEGIN_ARGS与SLATE_END_ARGS这两个宏之间,添加自定义Slate控件参数与参数默认值 SLA...
首先是SButton中通过SLATE_BEGIN_ARGS宏定义了FArguments类型,SLATE_ATTRIBUTE( FText, Text )定义了一个FArguments类中的TAttribute<FText> _Text的成员变量,以及一大堆Text(xxx)的成员函数,那么大家平时写的SNew(SButton).Text(XXX),只不过是去匹配FArguments类型中的Text函数。
自定义Slate控件是为游戏引擎UE提供更强大功能的关键步骤。创建自定义Slate控件首先需要创建CustomWidget.h和CustomWidget.cpp文件。选择SCompoundWidget作为父类,并使用SLATE_BEGIN_ARGS与SLATE_END_ARGS宏定义参数与默认值。在Cpp文件中,通过BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION和END_SLATE_FUNCTION_BUILD...
以SButton为例,它覆盖了与用户交互相关的事件处理。探索Slate构建逻辑,从SImage开始,使用SLATE_BEGIN_ARGS和SLATE_END_ARGS宏定义参数,打包成FArguments结构,用于SWidget构造函数。UE提供多种赋值方式,简化非平凡变量处理。
这里我们以常用的SLATE_ARGUMENT(参数)为例 #pragma once class NewWidget : public SCompoundWidget { public: SLATE_BEGIN_ARGS( NewWidget ) : _IsFocusable( false ) {} SLATE_ARGUMENT( bool, IsFocusable ) SLATE_END_ARGS() void Construct(const FArguments& InArgs); private: bool IsFocusable; }...
2、最小Slate Widget类 这是UMG Widget类引用的 Slate 类: class CUSTOMWIDGET_API SSlateSlice : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SSlateSlice) {} SLATE_END_ARGS() void Construct(const FArguments& InArgs); }; 1. 2.
在SLATE_BEGIN_ARGS和SLATE_END_ARGS两个宏中间写上宏SLATE_ARGUMENT(float, f1),第一个参数为数据类型,第二个参数为变量名称。此时就可以在cpp文件的构造函数中使用其变量,获取的方式:通过InArgs“.”出来。 voidStest::Construct(constFArguments&InArgs){floatf2=InArgs._f1;/* ChildSlot [ // Populate th...
SLATE_BEGIN_ARGS(STestEditorViewport){} SLATE_END_ARGS() void Construct(const FArguments& InArgs); STestEditorViewport(); ~STestEditorViewport(); protected: virtual TSharedRef<FEditorViewportClient> MakeEditorViewportClient() override; }; ...
新建一个C++空类 放置插件目录 新建SlateWidgets 内 #pragma once #include "Widgets/SCompoundWidget.h" class SAdvancedDeletionTab:public SCompoundWidget { SLATE_BEGIN_ARGS(SAdvancedDeletionTab){} //可以传递参数 SLATE_ARGUMENT(FString,TestString) ...
// 假设我们有一个自定义的 Slate 控件类 class FMySlateWidget : public SCompoundWidget { public: // 构造函数 SLATE_BEGIN_ARGS(FMySlateWidget) {} SLATE_END_ARGS() // 重载 OnInitializeWidget 方法 void OnInitializeWidget(FArguments InArgs) override { // 初始化控件,比如添加子控件等 // ......