什么是 Slate?
Slate是一个完全自定义和平台无关的用户界面框架,旨在为工具和应用程序构建用户界面(User Interface),比如虚幻编辑器、游戏内UI,既有趣又高效。 它结合了声明性语法和轻松设计,布局和样式组件的功能,允许轻松创建和迭代UI。
![](https://i-blog.csdnimg.cn/blog_migrate/093bc214186cd3c408f76c792072b961.png)
![](http://www.lzshuli.com/game_images/170809981.jpeg)
Slate 与 游戏UI的关系
我们的游戏中,在拼接用户界面时,并没有直接用到Slate,而是UWidget
![](https://i-blog.csdnimg.cn/blog_migrate/0768be52d1658c48bf0cc3ccd834722f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/67dd0e2acd6e5621b16430b643a1ac60.png)
而这些UWidget的基本结构如下:
(伪代码)
UCLASS()
class UMG_API UWidget
{
GENERATED_UCLASS_BODY()
public: // what we set to slate
UPROPERTY(EditAnywhere)
SlateStyle StyleLayout, StyleColor, StyleSize . . .
public: // what slate respond to us
UPROPERTY(BlueprintAssignable)
FOnEvent OnClickEvent, OnHoverEvent . . .
protected: // slate
TSharedPtr<Slate> MySlate;
}
本质上讲,UWidget是对Slate的一次封装,使其更方便、可视化地被开发者摆放位置,修改参数
AddToViewPort
在执行UWidget的AddToViewPort方法时,其主要生效的代码为:
// 新建一个画布容器 TSharedRef<SConstraintCanvas> FullScreenCanvas = SNew(SConstraintCanvas); FullScreenWidget = FullScreenCanvas;
// 获取当前UWidget所对应的SWidget TSharedRef<SWidget> UserSlateWidget = TakeWidget(); // 将SWidget放入新建的画布中 FullScreenCanvas->AddSlot() .Offset(BIND_UOBJECT_ATTRIBUTE(FMargin, GetFullScreenOffset)) |