1. 程式人生 > >C++程式設計師如何入門Unreal Engine 4

C++程式設計師如何入門Unreal Engine 4

  1. 首先,本文只是針對有比較熟練C++技能的程式設計師,他可以沒有任何圖形學或遊戲引擎方面的經驗知識。
  2. 其次,本文只是偏重工程方面的介紹,沒多少理論知識的介紹,目的純粹就是讓一個完全沒有接觸過UE4的C++程式設計師能夠很快著手開發UE程式。
  3. 再次,本文只是個人的經驗之談,甚至有可能有理解錯誤的地方,因為我也只是學了UE4一個多月,但是確實能夠讓我很短時間就能從事UE4的開發了。
  4. 最後,源於以上幾點,高手勿噴,如有不爽,繞行即可。若有閒情雅緻,可以順手指點指點,不吝感激。

我研究的是UE4.10,因為電腦上只下載了這個,看的官方文件是4.9的。

以下就按時間順序排列我的學習過程:

1)建立工程

對程式設計師來說,甭管這個引擎如何如何,我如果用它開發一個什麼東西,首先得建立一個工程,然後把所有相關的程式碼都寫到這個工程裡。這就是我們要知道的第一步。那麼在UE4裡如何建立一個工程呢?在啟動引擎程式時,自己會蹦出一個視窗,讓你選擇開啟電腦上已有的工程或者建立新的工程。UE4工程只有兩種型別:藍圖的、C++的。這兩種型別的工程其實沒有任何實質性的區別。把UE4工程分成這兩種型別,表現出來的唯一區別是:C++型別的工程建立的時候,會自動彈出visual studio來開啟這個UE4工程。僅此而已。

而對程式設計師來說,藍圖型別的工程建立好後,在該工程的UEditor的File選單裡會有一項[Create Visual studio Project],中文版是[生成Visual Studio專案],以後我只針對英文版來寫了。點選一下這個選單項,對應的Visual Studio工程檔案就建立好了。相應的,File選單裡還有[Open Visual Studio]選單項,作用就是在Visual Studio裡開啟該工程對應的程式碼檔案。其他選單項暫且放下,一會兒再回頭說幾句就懂了。

2)UE4的工程配置

甭管是藍圖型別還是C++型別的,工程反正是建立好了。

到這裡,我們先不管如何往這個工程裡寫程式碼新增新功能。我們直接Build一下這個工程:UEditor介面工具欄上的Build按鈕或者VisualStudio的Build按鈕。沒有任何懸念,結果肯定是Build成功。

哦,說到這裡,提一下,UE4.10以上必須安裝Visual Studio 2015。我們開啟對應的Visual Studio工程(如果是藍圖型別,按照上面所述方法生成Visual Studio工程即可)。

215337owpzs0wsovpwpqpp

在VisualStudio裡,我們能看到這個工程裡的程式碼檔案就很少的幾個,如圖,這張圖片裡VirtualCamera是我的工程名。注意看.Target.cs字尾的檔案,這裡所謂的Target就是Makefile檔案裡的Target的意思。我們知道手寫Makefile檔案在某些情況下是比較費勁的行為,因此程式設計師們造出了很多Automake工具用來自動生成Makefile檔案。因此,UE4自己也造了一個Automake工具,用來生成Makefile檔案。這個Automake工具是C#寫的,用C#檔案來描述Make的規則,比如這個Target.cs就是用來描述Makefile裡最終的成品,可以有多個Target.cs,但它們不一定同時起作用。比如vs編譯型別選為[Development]而不是[Development Editor]時,那個Editor.Target.cs檔案描述的Target的Make規則就不會起作用,此時,即便你從硬碟上和vs裡刪掉這個.Editor.Target.cs檔案,工程也能成功編譯並執行。檔案列表裡還有類似.Build.cs檔案,這個就描述類似Makefile裡的中間目標檔案的Make規則。這些cs檔案是在新增藍圖類或者c++程式碼時自動生成的,不用鳥它們,只需要知道這些cs檔案是UE4的Automake工具需要的就行了,只要有了這些cs檔案,我們的UE4工程就能正確編譯執行。我這句話裡蘊含的意思還有:對於UE4工程的編譯,完全不依賴visual studio的project檔案,即.vcxproj等檔案。也就是說UE4使用自己的AutomationTool來讀取cs檔案描述的Make規則來進行編譯。然而,凡是用visual studio開啟的工程,必然需要一個.vcxproj檔案,結合剛才講的,我們就能明確這裡visual studio的作用僅僅是方便我們閱讀和編寫原始碼,這裡visual studio的方便性還是很巨大的,不是嗎!因為vs為閱讀編寫原始碼提供了強大的支援。上一節的最後我沒講UEditor的File選單裡還有一項[Refresh Visual Studio Project],這個選項的作用就是遍歷我們的UE4工程目錄結構,根據遍歷的結果,重新整理.vcxproj檔案,然後讓vs重新載入這個更新的proj檔案,這樣只要我們往工程目錄裡增加或刪除了程式碼檔案,只需點選一下這個選單項,在vs裡就能反映出這種變化。

3) UnrealAutomationTool

工程的Build是一個很長的過程,裡面分成多個階段,我只關心裡面最重要的階段,就是程式碼檔案的Compile過程。這裡先介紹幾個名詞:UBT(Unreal Build Tool)又叫UnrealAutomationTool,這個工具主要作用就是組織Build流程,直白點說就是按一定順序呼叫不同的工具完成整個Build過程。首先呼叫的肯定是解析各個cs檔案的工具,解析的結果就是Build的目標,先Build誰,再Build誰。Build的順序和目標定下來之後,就要開始真正的Build動作了,也就是Compile程式碼檔案,Link出目標。Compile的第一步是呼叫UHT(UnrealHeaderTool)工具,這個工具就類似於C++裡的前處理器,UHT讀取.h檔案,解析裡面的一些元資訊(UE4定義的,比如[UCLASS],[USTRUCT][BlueprintCallable],UPROPERTY,UFUNCTION等等),這些元資訊不是C++語言的一部分,C++編譯器自然無法識別,所以需要UHT工具先解析這些元資訊,生成對應的.generated.h檔案,在這個.generated.h檔案裡的內容就是用合法C++程式碼模擬的剛才那些元資訊。然後原先.h檔案裡的所有元資訊文字都會被刪除。這一步完成後,出來的就都是合法的C++的程式碼檔案了,可以直接送給C++前處理器處理,進而編譯器,連結器。最終產出Build的目標,完成Build過程。參考一下下圖:

(點選圖片看大圖)

215337bawz3ltwachrvvlh215337jtlvozvoxztplvws

4)還是要說說Blueprint

到這裡,對於C++程式設計師來說,算是掌握了總體的開發流程,知道如何開始,如何結束了。

那麼剩下的就是學習如何往工程裡新增程式碼,並學習程式碼怎麼寫--學習有哪些api可以用,如何用。這是UE4開發裡最重要的一塊了,廢話,前面說的都只能算是常識,不能算UE4開發。然而只有知道了這些常識之後,我們接下來才可以真正開始學習開發。

首先開宗明義,學習UE4最快速的捷徑就是Blueprint,這是我學了1個多月的UE4的最大感觸。

在UE4的官方文件裡,講Blueprint時首先就說到:在UE4裡,Blueprint支援的功能涵蓋了C++支援的幾乎所有特性,即BP(Blueprint簡寫)幾乎等價於C++。然而,話鋒一轉,其又說到,BP有其適用場合,不是所有場合都適合用BP,因為某些場合BP的效能比原生C++程式碼要慢。

適合用BP的場合:主要就是對效能要求不是特別高的應用場景,比如絕大部分Event的響應等等。然而在我看來,大部分的開發任務不就是Event的響應麼,這也就是說BP適用UE4開發的絕大部分場景。而且,眾人所說BP太慢,純粹是無理由的偏見,我承認某些BP可能沒有原生手寫C++程式碼快,但並不代表BP效能低。

從開發效率上來看,能用BP的地方儘量用BP所帶來的好處實在是不用多說了。尤其對新手來講,寫C++程式碼都不知道有哪些東西可以呼叫,更別談寫高效的C++程式碼了。因此,對新手來說,學習BP是必須的。其最重要的作用,就是讓UE4新手能快速的掌握引擎在程式碼層面提供的功能。

然而,在認識到這一點之後,我並沒有立即開始BP的學習,而是先學習了一下如何讓C++程式碼與BP互動,具體的知識少不了要自己去看官方文件,我這裡只是列出我的經驗。

還要提一下:凡是能放到unreal場景裡的東西都是Actor物件,對應C++裡的AActor型別。Actor只是一個殼,它提供的所有功能都是由它包含的Component來提供的,不同的Component能提供不同的功能,最後表現出來的就是Actor具有所有這些Component提供的功能。Component的總分類,見連結,這個和Unity中的元件有些類似。我能保證這裡的文件真正看懂的話,C++程式設計的部分從動手方面來講不存在任何問題了。接下來看BP文件那一章,掌握BP也沒有任何懸念,而且是很快樂的過程,不會有任何難度。

215337nduj0u6qotdn6on6

#5)GamePlay

關於遊戲模式,這裡的文件也需要在看BP前提前閱讀一遍 :

215337fee8jelj5xjlj78b

這裡也有一張腦圖,大家看看:

(點選圖片看大圖)

220522vfvwvt94ukm7vmvl