浅谈UE4中Slate/UMG/UWidget/SWidget的差别

浅谈UE4中Slate/UMG/UWidget/SWidget的差别

浅谈UE4中Slate/UMG/UWidget/SWidget之间区别,可以参考对后续哪个类改动,是否需要改到slate做出判断

Slate
Slate是一套UE4的GUI架构。编辑器看到的界面/Runtime的UMG,几乎都是用Slate制作
Slate并不可视化,需要我们在代码里面手动一行行的敲(链式编程),其运行效率高,但是无法断点调试也不利于维护
Slate是基于TSharedFromThis的,只能应用于C++

UMG(Unreal Motion Graphics)
我们在开发GamePlay的时候用的最多的是UMG,,对已封装好的控件进行布局,使用UMG过程中我们不会感觉到Slate的存在,UMG里面都是封装的Slate代码,我们在UMG编辑器中拖动的控件,对其设置属性其实就是在对Slate进行修改。
UMG是基于UOBJECT的,UMG可以暴露于BP和lua等。
(例:比如按钮UButton.h末尾就是包裹了一个SButton 具体定义 TSharedPtr < SButton> Button)

UWidget
这是向 UObjects 公开的所有已包装 Slate 控件的基类,是Widget Blueprint里面的可视化编辑控件,方便开发设计直接编辑UI和实现功能,解决了SWidget编辑困难的问题,在运行时会转换为SWidget

新建一个U类组件:

UButton* pBtn = NewObject

SWidget
都知道UMG里面我们通常会继承自UUserWidget做一个自己的基类来写,而在Slate里面应该继承自SWidget
SWidget遵从Slate编程写法,是slate widget的抽象基类,故这里也是链式编程,构造函数不适合直接被调用,而是使用SNew 或SAssignNew
新建一个S类组件:

TSharedRef<SButton> Button = SNew(SButton);
TSharedPtr<SButton> Button;
SAssignNew( Button, SButton );

故一般的访问接口顺序:UMG -> UWidget类型控件 -> 头文件会有智能指针包裹的SWidget


总结
综上:GamePlay的业务层使用UMG布局,并根据封装好的UWidget控件进行复用(如一个页面添加多个按钮),再对各功能处理业务逻辑。
将Slate封装到UMG中去有很多的好处,如果把逻辑和写Slate的链式编程写在一起,我们会发现一个程序会写得非常长,而且UI界面和业务逻辑耦合特别多,很难拆分,所以一般来讲由Swidget封装底层逻辑给UWidget类调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值