美文网首页
UE4 SlateUI系统初探

UE4 SlateUI系统初探

作者: 蛋求疼 | 来源:发表于2017-08-17 18:51 被阅读0次

问题列表:

  1. Slate是什么
  2. 整个编辑器都是用Slate做得吗
  3. 场景的绘制工作是如何与Slate结合的?

Slate是一套跨平台的UI框架,既可以用来做应用程序的UI(如UE4 Editor)、工具的UI,也可以做游戏中的UI。
经过初略地阅读Slate源码,得出如下一个关系图:

UE4_Slate_Windows.jpg

解释:
1. Slate Application表示一个应用程序对象
2. 应用程序对象 可以有多个Slate-Window, 每个Slate-Window对应一个Native-Window(操作系统提供的窗口);
3. Slate-Window里面有很多Slate Widget对象,组成了它自己的窗口系统。 这一套的独立的UI系统类似于MyGUI,CEGUI,Windows的视窗系统。

UE4-Editor就是由多个Window和每个Window下的各种Widget组成的,渲染3D场景的那块也是个Widget。
下面是一个简单的布局图:

UE4_Editor_Slate_Layout.jpeg

以前UE3 Editor是用XWidgets那套跨平台UI库做的,每个控件都是原生窗口。经过Slate这一套后,可以发现:窗口系统这个行为是一致的(如 鼠标,键盘消息,窗口层次),以前UE3上的Viewport, ViewportClient, GameViewportClient, LevelEditorClient这一套都是适用的。
现在用了Slate这一套针对这个Native-Window上的绘制流程就如下了:

  1. 先绘制3D场景Widget (NOTE: 这个用于绘制3D场景Widget的下面是不会有其它Widget的 :-) )
  2. 再绘制其它Slate-Widgets

下面看一下Intel GPA的分析截图
Editor模式:

UE4_Editor_Slate_GPA.jpeg

PIE模式:

UE4_Editor_PIE_Slate_GPA.jpeg

可以看出PIE中的游戏UI是 Slate Widget实现(UMG包装了Slate Widget,使之融合到对象系统),这些UI Widget是GameViewport Pannel的子控件。

*关于C++中创建Slate界面
Slate通过宏和重载C++运算符实现声明式语法, 在C++源码中就可以体现出窗口的层次布局:

// Add a new section for static meshes
ContextualEditingWidget->AddSlot()
.Padding( 2.0f )
[
    SNew( SDetailSection )
    .SectionName("StaticMeshSection")
    .SectionTitle( LOCTEXT("StaticMeshSection", "Static Mesh").ToString() )
    .Content()
    [
        SNew( SVerticalBox )
        + SVerticalBox::Slot()
        .Padding( 3.0f, 1.0f )
        [
            SNew( SHorizontalBox )
            + SHorizontalBox::Slot()
            .Padding( 2.0f )
            [
                SNew( SComboButton )
                .ButtonContent()
                [
                    SNew( STextBlock )
                    .Text( LOCTEXT("BlockingVolumeMenu", "Create Blocking Volume") ) 
                    .Font( FontInfo )
                ]
                .MenuContent()
                [
                    BlockingVolumeBuilder.MakeWidget()
                ]
            ]
        ]

    ]
];

相关文章

  • UE4 SlateUI系统初探

    问题列表: Slate是什么 整个编辑器都是用Slate做得吗 场景的绘制工作是如何与Slate结合的? Slat...

  • UE4学习009-渲染Coding初探

    UE4学习009-渲染Coding初探 在 UE4 中用 BP 进行渲染编程已经很嗨,且足以满足几乎所有的需求,但...

  • UE4输出日志乱码

    只需要对VS做更改,无需修改系统语言以及系统区域(乱码和UE4设置无关)。找到Visual Studio Inst...

  • UE4 毛发渲染参考文章

    《UE4 头发制作流程》《ue4 4.24测试功能groom头发》《Digital Human UE4 TEST ...

  • UE4之UFUNCTION介绍

    UFUNCTION UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数。 UObject 或蓝图...

  • 射线检测

    [玩转UE4动画系统>基础篇] 之 什么是射线检测[https://orzgame.blog.csdn.net/a...

  • HFTP文件系统解析

    初探 抽象类org.apache.Hadoop.fs.FileSystem代表hadoop的一个文件系统,目前系统...

  • Android---初探自定义View(三)

    在初探自定义View(一)和初探自定义View(二)里面,我们都是针对系统现有的组件进行设计和修改,那万一碰到需要...

  • Android WMS动画系统初探(一)

    基于AndroidR源码分析 Android WMS动画系统初探(一)[https://juejin.cn/pos...

  • Android WMS动画系统初探(二)

    基于AndroidR源码分析 Android WMS动画系统初探(一)[https://juejin.cn/pos...

网友评论

      本文标题:UE4 SlateUI系统初探

      本文链接:https://www.haomeiwen.com/subject/geunrxtx.html