UE4小知識(含Slate)

前綴單詞的意思

 - U   繼承自UObject的子類以U爲前綴 
 - A   繼承自AActor的子類以A爲前綴
 - T   模板
 - S   Slate
 - F   自定義的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

尋找變量、參數或任何內容的方法

源碼萬歲!!!

  1. 尋找UMG可視化版本,看該功能如何使用,然後去Slate中尋找對應內容:在VS中搜索關鍵字或者相應的註釋 找到對應C++位置
  2. UE4是使用Slate製作界面,因此可以從UE4的源碼中尋找使用Slate製作的部分,查看ue4的slate創建案例的代碼,作爲參考
  3. 調用WidgetReflector,點擊Picking來抓取元素,點擊Esc捕獲到抓取的元素,然後就可以找到源代碼的行數,繼續調試來探索其本質,先嚐試用最簡單的代碼完成功能,然後逐步自己封裝升級優化 
    這裏寫圖片描述 
    這裏寫圖片描述
    這裏寫圖片描述
  4. 怎麼寫參數? 
    Alt+G 看源碼

  5. 再加一句,怎麼改bug? 
    排除法,從最近的一行開始還原,依次往上,看哪行的問題,直到問題修復,鎖定出錯代碼

slate小知識

  1. Overlay:有點類似於PhotoShop的圖層,是一層一層堆疊的,在代碼中或者UE4中放置的位置越往下,圖層越偏上;所有圖層都可以顯示
  2. Widget Switcher:也是一層一層堆疊結構,但是每次只顯示一個圖層
  3. collapsed :塌陷,徹底消失,不顯示,也不在視口中佔位置 
    hidden:佔位消失,看不見,但仍在視口中佔位置
  4. Slot:插槽。在slate中,控件分爲三種類型:Leaf Widgets不帶子槽的控件如TextBlock;Panels子槽數量爲動態的控件;Compound Widgets子槽數量固定的控件如SDockTab,Border,Button等
  5. return FReply::Handled(); :截斷消息。表示該消息在這一層已經被截斷,不會繼續向下分發,通常在該層就進行了處理
  6. SLATE_EVENT:傳遞代理 (代理名稱、參數類型) 
    SLATE_ARGUMENT:可以傳遞函數 
    SLATE_ATTRIBUTE:只能傳遞變量

其他小知識

  1. 初始化順序:引擎 -> Game Instance -> Game Mode
  2. 出現漢字警告:先將鼠標點擊進代碼中,表示要對當前的文檔進行調整。然後“文件 - 高級保存選項 - 65001”或者“File - Advanced save options… - 65001”
  3. Super的使用:在子類的構造方法中調用父類的構造方法。如果用在子類的構造器中,必須是第一個語句
  4. 分清邏輯和業務,寫界面就寫界面邏輯,記住代理是個好東西。①按鈕被點擊 ②按鈕被點擊時打印“被點擊”。(可能目前理解的不到位,以後再做修改)
  5. 使用UMG做界面時先去掉自帶的畫布,因爲那個畫布有很大的限制,取的是絕對位置,可以添加一個overlay或者border來作爲最底層的容器
  6. MVC模式:Manage-View-Control 代理在其中起了很大的作用
  7. 打包出來的文件夾中會有一個.pak文件位於Content文件夾中,這裏面存放的都是一些壓縮優化後的資源;.exe是代碼
  8. 在一個類的構造函數里加斷點,你能找到世界的起源!
  9. 什麼是Actor?具備掛載組件的能力!如果是Actor,他一定被放進了世界裏,一定能在World Outliner中被看到,他可以有座標(Transform被封裝在了SceneComponent組件中);反之,如果你能在世界中看到的所有,一定是繼承自AActor
  10. Actor和Component的關係:在構建的時候,SpawnActor一定會先調用到SpawnRootComponent,Actor就是Component上邊的一層,組件一層一層的構造完畢的時候,Actor就創建好了
  11. PlayerState:當前關卡玩家的遊戲數據
  12. GameState:當前關卡的遊戲數據
  13. GameInstance:跨關卡的數據統計

    智能指針與垃圾回收

    這麼理解對嗎?!!!

    1. 我想結合一下UE4的垃圾回收機制,垃圾回收機制對於所有未被領養的東西(具體是啥?)會在一分鐘後進行回收,而什麼樣的東西未被領養呢?UObject的東東。而繼承自AActor的東東都被“世界”領養了,參考上邊第9條,於是乎,一個神奇的叫做AddtoRoot()的函數就出現了,幫我們領養所有UObject的東東,防止被垃圾回收
    2. 轉過來看智能指針,這是c++的東西,裏邊比較重要的概念就是“引用計數”,這時候又出現了一個叫做弱指針的東東,是不會貢獻引用計數的。
    3. 普通指針變爲智能指針,這個函數就是MakeShareable(),舉個例子
TSharedPtr<FMyFunction> MyFunction;
MyFunction = MakeShareable(new FMyFunction());
  • 1
  • 2

解決方案配置(編譯配置)

官方文檔傳送門編譯遊戲項目 
編譯配置由兩個關鍵字組成:編譯狀態加編譯對象 
編譯狀態: 
1. Debug:調試模式,加斷點進行調試等都是在這個狀態下進行調試的,會生成大量的.dll,.pdf等中間文件方便調試,同時調試引擎代碼和遊戲代碼,最常用的 
2. DebugGame:只能調試遊戲代碼,無法調試引擎代碼。按最優方式編譯引擎 
3. Development:半發佈、封測狀態下。引擎和遊戲代碼都將在此配置中被編譯 
4. Shipping:非調試模塊,發佈狀態。可達到最佳性能並能發行遊戲 
5. Test:測試 
編譯對象: 
1. 空白:該配置編譯了您項目的一個獨立可執行版本,但需要平臺特定的已烘焙內容。編譯的對象是發佈之後的資源(已經被壓縮優化) 
2. Editor:爲能在虛幻編輯器內打開項目並查看所有變更的代碼,該項目必須在 Editor (編輯器)配置內進行編譯。對象是發佈之前的資源,未被壓縮優化


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