【UE教程/进阶】使用Slate
目录
- Slate语法
- 语法结构示例
- 创建Slate
- 设置属性" . "
- 添加插槽" + "
- 插槽控件" [ ] "
- 向Editor中添加控件
- 游戏中添加控件
Slate语法
语法结构示例
auto Window = SNew(SWindow)
.ClientSize(FVector2D(600, 600))
[SNew(SHorizontalBox)+ SHorizontalBox::Slot()[SNew(STextBlock).Text(FText::FromString("Hello"))]+ SHorizontalBox::Slot()[SNew(STextBlock).Text_Lambda([](){return FText::FromString("Slate");})]
];
创建Slate
SNew(Slate类型)
:创建Slate,返回指向该Slate的TSharedRef。SAssignNew(TSharedPtr<Slate类型>, Slate类型)
:创建Slate,将传入的TSharedPtr指针指向创建的Slate。SArgumentNew(参数集, Slate类型)
:使用参数集进行构造。
设置属性" . "
Slate对象.属性名称(属性值)
:设置Slate的属性
添加插槽" + "
Slate对象 + 插槽类型::Slot()
:向Slate添加插槽以添加子控件。
插槽控件" [ ] "
Slate对象[SNew( ... )]
:在Slate对象的插槽中添加子控件。
向Editor中添加控件
- 通过FSlateApplication添加窗口:
FSlateApplication::Get().AddWindow(...)
,参数如下:- TSharedRef Window:要显示的SWindow。
- bool Show:是否立即显示创建的窗口,若不立即显示窗口,可以后续使用
Window->ShowWindow()
显示窗口
auto Window = SNew(SWindow);
FSlateApplication::Get().AddWindow(Window, true);
- 通过TabManager添加选项卡:
FGlobalTabmanager::Get()->RegisterTabSpawner(...)
,
参数如下:- FName Name - 选项卡名称
- FOnSpawnTab& Tab - 要创建的选项卡
- 显示选项卡:
FGlobalTabmanager::Get()->TryInvokeTab(...)
:如果选项卡在最后已知位置关闭,则尝试打开选项卡;如果选项卡已经打开,会转到选项卡。参数如下:- FTabId TabID:选项卡ID
FGlobalTabmanager::Get()->RegisterTabSpawner(FName("CustomTab"),FOnSpawnTab::CreateLambda(
[](const FSpawnTabArgs& Args){return SNew(SDockTab)[SNew(...)];
}));
FGlobalTabmanager::Get()->TryInvokeTab(FTabId("CustomTab"));
游戏中添加控件
- 通过GameViewport管理控件:
GEngine->GameViewport->【以下函数】
:AddViewportWidgetContent(TSharedRef<SWidget> Widget, int32 ZOrder)
:添加控件并指定显示层级ZOrder。RemoveViewportWidgetContent(TSharedRef<SWidget> Widget)
:移除控件。AddViewportWidgetForPlayer(ULocalPlayer* Player, TSharedRef<SWidget> Widget, int32 ZOrder)
:向指定Player添加指定控件。RemoveViewportWidgetForPlayer(ULocalPlayer* Player, TSharedRef<SWidget> Widget)
:从指定Player移除指定控件。RemoveAllViewportWidgets()
:移除所有控件RebuildCursors()
:重新创建光标控件
正春华枝俏,待秋实果茂,愿与君共勉