天天看點

UE4學習雜項總結一

一、前言

        學習UE4也有一段時間了,将遇到的問題做了一個彙總,也許對我來說目前這寫問題還算是一個知識點,因為其中還有一些基本的操作問題。當然也有一些非常費解的、截至到目前為止我也沒有找到解決方法的問題。

二、具體内容

2.1、界面操作BoxBrush

剛建立的BoxBrush在Details中找不到Materials、Physics等屬性,無法對材質進行設定,如圖2.1.1所示:

UE4學習雜項總結一

圖2.1.1

這是因為剛建立的Bush需要轉換成StaticMesh才會有上述的屬性,點選BrushSetting下的Create StaticMesh後,如圖2.1.2所示,會将該Brush儲存為一個靜态網格到文

UE4學習雜項總結一

圖2.1.2

件夾中,并且世界大綱中的Brush也會自動轉成StaticMesh,針對StaticMesh的Details是會包含上述的屬性的。

2.2、自定義的GameInstance藍圖或類的使用

如果自定義了GameInstance藍圖或類,比如命名為MyGameInstance,一定要在ProjectSetting裡設定為自定義的MyGameInstance,如圖2.2.1所示,

UE4學習雜項總結一

2.2.1

否則會出現轉換問題。如圖2.2.2所示,如果不進行圖2.2.1的設定,在将系統GameInstance轉成MyGameInstance時出現轉換失敗。

UE4學習雜項總結一

圖2.2.2

 2.3、每個UI中的元件都可以成為設計視圖中的變量

 在UI中有兩個視圖分别為Designer和Graph,在Designer中建立的UI元件在Graph中預設是不能引用的,需要将UI元件的IsVariable勾選方可。如圖2.3所示,勾選元件的Is Variable後在Graph視圖

UE4學習雜項總結一
UE4學習雜項總結一

圖2.3

的Variable/UI下會顯示剛剛勾選的元件,此時在定義的方法和事件中可以引用該元件。

2.4、 UI的Text綁定更新問題

       如圖2.4.1所示,在控件Text上綁定文本更新方法,如果是從這建立的綁定

UE4學習雜項總結一

圖 2.4.1

方法會執行,但如果是從這選的一開始建立好的方法,如圖中的GetPing方法有可能不執行,這個可能是虛幻4(版本為4.25.4)的Bug。也即一定要從圖1.4.1中點選“Create Binging”建立綁定後的處理方法才會被每幀重新整理,如果是事先在“Graph”視圖中建立好的方法,在圖2.4.1中選擇後,不會每幀執行。

2.5、如果UI按鈕的子部件設定為“Collapse”則整個按鈕都會隐藏并且不會占用布局空間

        如圖2.5.1所示,按鈕“DebugDestroySession”的子物體為“TextBlock”,并且

UE4學習雜項總結一

圖2.5.1

設定這個子物體的Behavior->visibility為Collapsed,則整個按鈕在運作時都會隐藏,并且不占用布局空間。

2.6、Cast To 自定義的GameInstance時失敗

        在2.2中設定了預設的GameInstance為自定義的MyGameInstance類還是出現轉換失敗的情況,可以檢查下系統的配置檔案DefaultEngine.ini裡的GameInstanceClass是否為對應的自定義遊戲執行個體名,如圖2.6.1所示為出現錯誤時對應的名字不是我建立的GameInstance名,我建立的遊戲執行個體名字為“MyGameInstance”,将其修改過來即可。比如我建立的“MyGameInstance”藍圖腳本在如圖2.6.2所示的檔案夾下,則在DefaultEngine.ini裡預設GameInstanceClass下面添加一句“GameInstanceClass=/Game/Blueprints/MyGameInstance.MyGameInstance_C”

修改完了之後,一定要重新開機一下工程才可以使用。

UE4學習雜項總結一

圖2.6.1

UE4學習雜項總結一

圖2.6.2

2.7、 關卡藍圖的Event BenginPlay不執行

        如果關卡Level1的Word Setting中設定了GameMode為自定義的模式,如圖2.7.1所示,則從别的關卡進入到該關卡時,如通過Open Level方法加載到Level1關卡時,Level1的關卡藍圖中Event BenginPlay會出現不執行的現象。隻需要将GameMode設定為None即可。

UE4學習雜項總結一

圖 2.7.1

2.8、 靜态網格Sockets屬性使用

        如圖2.8.1所示,帽子的模型可以通過設定其Sockets屬性為head而快速放置帽子的位置。

UE4學習雜項總結一

圖2.8.1

 2.9、新編譯或重新打開工程能解決很多問題

        比如如圖2.9.1所示,同樣的兩個動畫狀态,上面的是編譯後帶幀率條的,下面的就沒有。不要覺得奇怪編譯一下就可以,如果還是不行,重新打開一下工程。

UE4學習雜項總結一

圖2.9.1

2.10、 動畫出現重複播發可能需要關閉循環

2.11、藍圖中自定義的事件有Replicate屬性而自定義的方法沒有

2.12、User Widget可以作為一個另外一個User Widget的一部分

比如建立了一個User Widget A,并且在A裡面有一個容器AC,再建立了一個User Widget B,可以直接将B建立完之後放置到容器AC中,如圖2.12.1所示的藍圖,建立完之後使用Add Child方法添加到容器AC中。

UE4學習雜項總結一

圖2.12.1

2.13、 純函數和非純函數的差別

        如圖2.13.1所示,在建立函數的屬性中有一個Pure的選項,勾選即成為純函數,反之為非純函數。純函數和非純函數的差別主要有:

UE4學習雜項總結一

圖 2.13.1

用途不一樣:純函數通常用于隻輸出資料值的 getter函數或運算符;調用方式不一樣:純函數不需要執行引腳,非純函數需要執行引腳,并且是作為輸入調用,如圖2.13.2的純函數

UE4學習雜項總結一

圖 2.13.2

“SetPlayerNumber”作為藍圖“Cast To MyPlayerState”的輸出調用時是不會執行的,必須作為輸入時才可以調用,如圖 2.13.3所示,當純函數“SetPlayerNumber”所謂“New Var 0”的輸入端調用函數時會執行。也即純函數連接配接到資料引腳,當需要依賴它們的資料時,編譯器會自動執行它們。

UE4學習雜項總結一

圖2.13.4

 2.14、在事件圖中可以使用Delay方法,在自定義的方法中不能使用

如圖2.14.1所示的Delay藍圖方法是在藍圖的事件圖章建立的,當複制到方法中時提示不能複制,如圖2.14.2所示。這也就意味着Delay隻能在事件中使用不能在方法中調用,但是我想要在調用方法後執行一段延遲的功能要如何實作,隻能通過方法後面調用自定義的事件了,略顯得繁瑣了些。有點類似于Unity的協程,單獨在方面裡面使用yield關鍵字是無法建立延遲的效果,必須要方法裡調用一個建立的協程才能實作。

UE4學習雜項總結一

圖2.14.1

UE4學習雜項總結一

圖2.14.2

方法中不能調用的方法還有

  1. 和Session有關的所有方法,如Create Session、Destroy Session、Find Session等;
  2. Timeline方法,但Set Timer by Function Name可以調用

目前總結到的就這麼多,後續再補充。

三、總結

        整理的都是平時遇到的問題,比較雜亂,不過有些問題還是很有幫助;

繼續閱讀