【UE4】 第15讲 Slate架构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nanhu2012/article/details/76832849

(版权声明,禁止转载)

Slate是一种完全自定义的、平台无关的用户界面架构,其设计目的是使得构建工具及应用程序(比如虚幻编辑器)的用户界面或者应用中的用户界面变得更加有趣、高效。它结合了一种可以轻松设计、布局及风格化组件的声明式语法,使得可以轻松地创建用户界面并进行迭代开发

【<1>Slate如何设计和表示Widget的父子层级关系】

--所有的Widget都继承自SWidget

--根据是否持有子Widget分为3类

----SLeafWidget没有子Widget

----SCompoundWidget有1个子Widget

----SPanel有多个子Widget

通过Slot的方式实现层级设计

---通过FSimpleSlot和TPanelChildren<FSlot>可以方便实现持有一个和多个子Widget

---Slot(水槽)的概念如下图,一个Slot对应一个Child Widget

【<2>Slate如何高效的布局多个层级上的多个Widget】

---逐一分析SOverlay、SBoxPanel、SSplitter

----Overlay翻译过来是 覆盖,含义可以理解为 层

----Panel翻译过来是 面板,可以理解为一个 矩形区域

----Split翻译过来是 分割,Splitter翻译过来是 分割器

【<3>Slate如何渲染多个层级上的多个Widget】

---看到下面的虚幻编辑器初始布局

----上面整个布局的层级结构实际上都组织在一个SWindow里面

----如下图所示,WindowOverlay里有多个Slot,简化后

-----Slot[0]里面是一个背景SImage

-----Slot[1]里面是MainWindowArea,就是背景SImage上面的各种布局内容

---在只渲染背景SImage的时候如下

----浅析一下整个虚幻Slate编辑器只渲染一个背景SImage时的流程

---在渲染多个Widget时候的图集TextureAtlas

----FSlateTextureAtlas通过一个

深度优先遍历(DFS)的二叉树(depth-first-search binary tree)管理图集里的texture

【Previously, slots were stored as a binary tree - this has been replaced with a linked-list of slots on the edge of the tree

(slots on the edge of the tree represent empty slots); this iterates empty slots in same order as a binary depth-first-search(DFS),except much faster.】

----FSlateTextureAtlas通过一个链表TLinkedList来实现并替代DFS二叉树,提高了速度

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【OGRE Unity UE4】引擎市场格局

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【<4>Slate如何处理多个层级上多个Widget的事件】

----以MouseMoveEvent为例,详述一下Event的处理过程

----Event产生后

如果有多个SWindow,首先确定是哪个SWindow来处理

然后在确定的SWindow里,寻找需要响应Event的WidgetPath

在Event开始寻找SWidget之前

SWindow的所有子SWidget需要通过

一个高效的FHittestGrid进行组织管理

【<5>虚幻Slate编辑器布局分解】

---菜单栏MenuBar和下面的整个Area组成了SLevelEditor

---菜单栏MenuBarWidget和下面的AreaWidget作为子Widget按照垂直排列在SVerticalBox内

---AreaWidget一分为二

----内部按照水平排列SHorizontalBox排列两个子AreaWidget

---AreaWidget1和AreaWidget2各自按照垂直排列SVerticalBox排列子Widget

                                                      

【C++基本功】

不久前有机会面试一个显卡大厂的D3D Driver Develop职位

技术部分的面试分为两个部分: 【3D Pipeline】和【C++】

---【3D Pipeline】部分聊下来感觉勉强在线,除了一些Pipeline特性没怎么用答的不理想

---【C++】部分几乎全线崩盘,简直像经历了一场灾难,从没因为C++感觉那么狼狈过...

面试前还一直自以为C++学的还不错...

结束后又想了想那些问题,除了一小部分是由于紧张想的太复杂

大部分还是因为平时没有意识到的一些知识点导致C++基本功太差

以后每篇结尾会加强一两个C++知识点

<1> C++进程内存分区

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

友情链接:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

猜你喜欢

转载自blog.csdn.net/Nanhu2012/article/details/76832849