【UE4】 第15講 Slate架構

(版權聲明,禁止轉載)


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++進程內存分區


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
友情鏈接:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章