1. 程式人生 > >Unreal Engine 4 初學者教程:開始

Unreal Engine 4 初學者教程:開始

Unreal Engine 4 是一個遊戲開發工具集,能夠開發從 2D 手機遊戲到 3A 級主機遊戲的一切。“方舟:生存進化”、“泰克肯7”和“王國之心 III”這些遊戲背後使用的引擎就是它。

對於初學者來首,用 Unreal Engine 4 開發是很簡單的。通過藍圖視覺化腳本系統,你可以不寫一行程式碼就創建出整個遊戲。再加上一個易於使用的介面,你就可以獲得一個可以執行的遊戲原型。

本教程主要是讓初學者入門。它涉及以下幾個知識點:

  • 安裝引擎
  • 匯入資源
  • 建立材質
  • 用藍圖(Blueprint)建立具有基本功能的物件

為了學習這些知識,你會建立一個用於展示一隻香蕉的旋轉轉盤。

注:本教程屬於 Unreal Engine 教程系列,這個系列共 10 個部分:

安裝 Unreal Engin 4

Unreal Engine 4 使用 Epic Games Launcher 進行安裝。進入 Unreal Engine 網站 並點選 Get Unreal 按鈕(右上角)。

下載這個安裝器需要建立一個賬號。建立賬號之後,選擇下載和你的作業系統對應的版本。

下載並安裝完安裝器之後,執行安裝器。會顯示一個視窗:

輸入 email 和密碼,點選 sign in。登入之後會顯示這個視窗:

在左上角,點選 Install Engine,安裝器會讓你選擇要安裝的元件:

注:Epic Games 經常升級 Unreal Engine,因此你的引擎版本會與此不同。例如我寫第一稿時,版本已經升級到 4.14.3! 只要你的版本不低於 4.14, 你就可以使用本教程。

預設選中的是 Starter Content、Templates and Feature Packs 和 Engine Source。就保持這樣的選擇不變。它們分別是:

  • Starter Content: 這是你可以在自己專案中免費使用的資源集。它包含了一些模型和材質。你可以在你的遊戲中臨時使用它們。
  • Templates and Feature Packs: 模板可以根據你的選擇來建立基本功能。例如,Side Scroller 模板會建立一個專案,專案中包含一個角色、基本動作和一個固定的水平相機。
  • Engine Source: Epic 提供了原始碼,這樣任何人都可以修改這個引擎。例如,如果你想為編輯器新增自定義功能,你可以通過修改原始碼來實現。

拖動這個列表,還有幾種不同的平臺。如果你不打算支援某個平臺,請讓它反選。

選好元件之後,點選 Install。安裝完成後,引擎會在 library 中顯示。接下來我們建立專案。

建立專案

點選 Launch 按鈕開啟專案瀏覽器。在專案瀏覽器中,點選 New Project 標籤頁。

點選 Blueprint 標籤頁。這裡,你可以選擇一個模板。但是,因為我們想從空白開始,所以選擇了 Blank template。

在下面,你會發現有更多的設定。

分別有這幾個選項:

  • Target Hardware: 選擇 Mobile/Tablet 會關閉一些後期處理效果。還會用滑鼠模擬觸控。設定為 Desktop/Console。
  • Graphical Target: 選擇 Scalable 3D or 2D 會關閉一些後期處理特效。請設定為 Maximum Quality。
  • Starter Content: 使用這個選項可以包含一些開始內容。為了簡單起見,這裡將它設為 No Starter Content。

最後一部分設定是指定專案資料夾地址和專案名稱。

點選 Folder 欄右邊的 3 個小點,可以改變專案資料夾地址。

專案名稱不代表遊戲名稱,因此不用擔心後期可以修改這個名稱。選擇 Name 欄的文字框,輸入 BananaTurntable。

最後,點選 Create Project.

認識介面

建立完專案,編輯器會開啟。編輯器分成了幾個區域:

  1. 內容瀏覽器: 這裡顯示所有專案檔案。用它建立資料夾並組織檔案。可以在搜尋欄中查詢檔案或者過濾檔案。
  2. Modes: 這裡可以選用各種工具比如 Landscape 工具和 Foliage 工具。預設工具是 Place 工具。它允許將各種物件比如燈光和相機放到遊戲關卡中。
  3. 世界大綱編輯器: 顯示當前關卡中的所有物件。你可以通過將相關的物件放入資料夾中來組織整個列表。它也可以搜尋或者通過型別來過濾。
  4. 詳情: 你選中的物件會在這裡顯示出屬性。這裡可以編輯物件的設定。這裡進行的修改只會影響這個物件的例項。例如,如果你有兩個球體,如果你改變了其中一個的大小,那麼只會對你選中的物件有效。
  5. 工具欄: 包含各種功能。你用得最多的一個就是 Play。
  6. 視口: 關卡檢視。按下右鍵拖動滑鼠可以檢視四周。按下右鍵,用 WASD 鍵進行移動。

匯入 Assets

光有一個圓桌卻沒有要陳列的東西有什麼用?請下載香蕉模型。裡面有兩個檔案 Banana_Model.fbx 和 Banana_Texture.jpg。當然,你可以用自己的模型。但你怎麼來使用這個該死的香蕉呢?

在 Unreal 能夠使用一個檔案之前,你必須匯入它。在內容瀏覽器,點選 Import。

通過檔案瀏覽器,找到 Banana_Model.fbx 和 Banana_Texture.jpg。框選住兩個檔案,然後點選 Open。

對於 .fbx 檔案,Unreal 會提供幾個匯入選項。確保 Import Materials 未選中,因為你會建立自己的材質。其它設定保持不變。

點選 Import。這兩個檔案就顯示到內容瀏覽器中了。

在匯入檔案時,實際上它是不會儲存到專案中的,除非你明確地這樣做。你可以用右鍵點選這個檔案,選擇 Save 就可以儲存它們了。還可以選擇 File\Save All 來一次性儲存所有檔案。確保經常使用儲存功能。

注意在 Unreal 中模型被稱為網格。選擇你已經有一個香蕉的網格了,可以將它放到關卡中了。

新增網格到關卡

選擇關卡看起來空空的,讓我們放點東西。
要新增網格,左鍵將 Banana_Model 從內容瀏覽器中拖到視口。放開滑鼠左鍵,就可以將網格放下。

關卡中的物件是可以移動、旋轉和縮放的。它們的快捷鍵分別是 W、E 和 R。然後使用操縱桿:

材質

如果你近距離檢視香蕉,你會發現它根本不是黃的。事實上,它是灰色的。要給香蕉一些顏色和細節,你必須建立材質。

材質是什麼?

材質決定了某件東西的表面外觀。在一個基本的關卡中,材質定義了 4 個方面:

  • 基本色: 一個表面的顏色或紋理。常用於新增細節和色彩的變化。
  • 金屬化:表面和金屬的相似度。通常,純粹的金屬擁有的金屬化值是最大的,而織物的金屬化值為 0。
  • 高光:控制非金屬表面的發光。例如,陶瓷擁有較高的高光值,而黏土則相反。
  • 粗糙度:粗糙度最大時,沒有任何高光。用於岩石或木頭的表面。

下面是 3 種材質的例子。它們顏色相同但屬性不同。每種材質都有在對應的屬性上設定為較高值。另外的屬性則設為 0。

建立材質

要建立材質,請進入內容瀏覽器,點選綠色的 Add New 按鈕。會彈出一個選單顯示你可以建立的 assets。點選 Material。

將材質取名為 Banana_Material 然後雙擊檔案開啟材質編輯器。

材質編輯器

材質編輯器由 5 部分組成:

  1. 圖(graph): 這個區域包含所有節點和結果節點。按下滑鼠右鍵並移動滑鼠可以平移。滾動滑鼠滾輪可以進行縮放。
  2. 詳情: 這裡顯示選中節點的屬性。如果沒有選擇任何節點,這裡會顯示材質的屬性。
  3. 視口: 包含一個預覽的網格,顯示你的材質。要轉動相機可以按住滑鼠左鍵並移動滑鼠。要縮放可以用滑鼠滾輪。
  4. 調色盤:一個列表,列出材質所有節點變數。

什麼是節點?

在開始編輯材質前,你必須知道節點是什麼。

節點構成了材質的主體。有許多不同的節點,提供了不同的功能。

節點可以有輸入和輸出,用一個圓圈+一個箭頭來表示。輸入位於左邊,輸出位於右邊。

材質有一個特殊的節點,就是結果節點,在 Banana_Material 中它是現成的。它是所有節點的終點。一旦你接通這個節點,就可以決定材質的最終顯示。

新增材質

要為一個模型新增顏色和細節,你需要一個紋理。一個紋理就是一張 2D 圖片。通常,它們會投射到 3D 模型上,讓它具有顏色和細節。

為了給香蕉貼圖,你需要使用到 Banana_Texture.jpg。TextureSample 節點允許你在材質上使用貼圖。

找到調色盤,找到 TextureSample。按下滑鼠左鍵,將它拖到“graph”視窗。

要選擇紋理,首先需要選中這個 TextureSample 節點。找到詳情面板,點選 Texture 右邊的下拉按鈕。

列表中列出專案中所有紋理。選擇 Banana_Texture.

要在預覽網格上檢視貼圖,需要將它插進結果節點中。左鍵點選 TextureSample 節點的白色輸出按鈕上,將它拖到結果節點的 Base Color 輸入按鈕上。

回到視口,在預覽網格上檢視紋理。旋轉它(按下滑鼠左鍵並拖動)檢視其它細節。

點選工具欄上的 Apply 按鈕,應用你的材質。然後關閉材質編輯器——這部分的工作結束了。

使用材質

要將材質應用到香蕉上,你需要指定它。回到內容瀏覽器,雙擊 Banana_Model 開啟它。這會顯示一個編輯器:

找到詳情面板 Materials 一節。點選 Element 0 右邊的下拉按鈕,選擇Banana_Material.

關閉網格編輯器,回到主編輯器,看一下視口。你將看到香蕉現在已經貼圖了。恭喜,你已經成為了一個關卡設計師了!

注:如果光線太暗,你可以在世界大綱編輯器中點選 Light Source 來改變它。在詳情面板中,找到 Intensity,設定為更高的值。

藍圖

香蕉看起來很好,但如果將它放到圓桌上旋轉就更好了。用藍圖來建立一個圓桌很輕鬆。

簡單講,一個藍圖(Blueprint)表示一件”東西“。藍圖允許你為物件建立自定義行為。物件可以是某種物體(比如圓桌),也可以是某些抽象的東西比如生命系統。

想製作一輛會動的車嗎?構建一個藍圖。一隻會飛的豬呢?使用藍圖。一隻在碰撞中爆炸的小貓?還是藍圖。

就像材質一樣,藍圖使用了節點系統。這意味著你只需要建立節點然後將它們連線起來,不需要編寫程式碼!

注:如果你更喜歡寫程式碼,你可以用 C++。藍圖易於使用,但它們無法做到和 c++ 程式碼一樣快。如果你不得不用到大量計算的東西,比如複雜演算法,你應當使用 c++。
當然雖然你喜歡 c++,但很多時候用藍圖其實是個好主意。藍圖有這些優點:

  • 通常,藍圖比 c++ 的開發速度更快。
  • 易於組織。你可以將節點分成不同的模組,比如功能和圖形。
  • 如果你和非程式設計人員一起工作,修改藍圖更容易,因為它的視覺化和直觀性。

將物件用藍圖來建立是一種好辦法。當需要提升效能時,將它們轉換成 c++。

建立藍圖

在內容瀏覽器,點選 Add New。在列表中選擇 Blueprint Class。

彈出一個視窗,讓你選擇父類。你的藍圖會從父類繼承所有的變數、函式和元件。花點時間瞭解每個類能做什麼。

注:Pawn 和 Character 也是 Actor 類,因為你可以放置和生成它們。

因為圓桌只會待在一個地方不動,Actor 類最適合。選擇 Actor 然後給檔案命名為 Banana_Blueprint。

最後,雙擊 Banana_Blueprint 開啟它。當視窗彈出時,點選 Open Full Blueprint Editor :

藍圖編輯器

首先,在藍圖編輯器中,選擇 Event Graph 標籤頁。

藍圖編輯器有 5 個主要的視窗:

  1. 元件視窗:當前元件的列表。
  2. 我的藍圖:用於管理你的圖形、功能和變數。
  3. 詳情視窗:顯示當前選中物件的屬性。
  4. 圖形視窗:這是關鍵。所有節點和邏輯都在這裡。按下右鍵並拖動滑鼠進行平移。滾動滑鼠滾輪進行縮放。
  5. 視口:任何擁有視覺化元素的元件都在這裡顯示。你可以用主編輯器一樣的方式移動和旋轉。

建立圓桌

要建立圓桌,需要兩個東西:一個基座和一個陳列品。你可以通過元件來建立這兩個東西。

什麼是元件?

如果一個藍圖是一輛車,那麼元件就是組成車輛的構件。例如,車門、輪胎、引擎都是元件。

但是,元件不僅僅限於物理物件。

例如,要讓車動起來,你需要新增一個移動元件,你甚至可以為它新增一個飛行元件讓它飛起來。

新增元件

在你看到任何元件之前,你需要切換到視口檢視。點選 Viewport 標籤頁即可切換到它。它看起來像這個樣子:

注:DefaultSceneRoot 元件在玩遊戲時不會顯示。它只在編輯器中顯示。

這個圓桌用到了兩個元件:

  • Cylinder: 一個簡單的白色圓柱體。這是放置香蕉的底座。
  • Static Mesh: 這個元件用於顯示香蕉網格。

要新增底座,找到元件面板。點選 Add Component 並選擇 Cylindar。

最好讓底座變得更短一點。按下 R 鍵,顯示縮放操作杆,然後將它縮短(不要管真實大小,你可以在後面修改它)。

然後來新增網格。回到元件面板,在空白地方點選左鍵,清除對圓柱體的選中狀態。這能保證接下來的元件不會附加在圓柱體元件上。

注:如果不這樣做,接下來的元件會附加在圓柱體上。這意味著它會繼承圓柱體的 scale 屬性。因為你縮短了圓柱體,那麼接下來的元件也會被縮短。

然後。點選 Add Component,選擇 Static Mesh。

要顯示香蕉,選擇這個靜態網格元件,然後點選 Details 標籤頁。點選 Static Mesh 右邊的下拉按鈕,選擇 Banana_Model。

如果它的位置不對,請移動香蕉。按 W 啟用操作杆,移動它的位置。

藍圖節點

接下來讓圓桌旋轉。這就要用到藍圖節點了。

和材質節點不同,藍圖節點擁有特殊的 pin 叫做 Execution pin。位於左邊的 pin 是輸入,位於右邊的則是輸出。所有節點至少有一個輸入/輸出。

如果節點有一個輸入 pin,它前邊必定有一個連線才能執行。如果有一個節點沒連線,那麼後續的任何節點都不會執行。

舉一個例子:

節點 A 和節點 B 會執行,因為他們的輸入 pin 已經有連線。節點 C 和節點 D 不會執行,因為節點 C 的輸入 pin 是斷開的。

轉動圓桌

在開始之前,看一眼元件面板。你會看到 Cylindar 和 Static Mesh 有縮排而 DefaultSceneRoot 沒有縮排。這是因為前者是附加到 DefaultSceneRoot 上的。

如果你移動、旋轉或縮放 root 元件,那麼它包含的元件也會有同樣動作。通過這種方式,你可以讓 Cylinder 和 Static Mesh 一起旋轉,而不是分別旋轉。

建立節點

要開始編寫指令碼,需要進入 Event Graph 標籤頁。

讓某個物件旋轉非常簡單,只需要建立一個節點。在 graph 檢視空白地方右鍵,開啟有效的節點選單。搜尋 AddLocalRotation。因為你需要旋轉底座和香蕉,你只需要旋轉 root 元件即可。選擇 AddLocalRotation(DefaultSceneRoot)。

注:如果沒有列出這個節點,請反選選單右上角的 Context Sensitive 選項。

在 graph 視窗中會多出一個 AddLocalRotation 節點。Target 輸入會自動連線到你選擇的元件。

要設定旋轉角度,找到 Delta Rotation 輸入,然後修改 Z 值為 1.0。這將導致藍圖沿 Z 軸旋轉。值越大,轉速越快。

要不斷地旋轉,你必須逐幀呼叫 AddLocalRotation。要逐幀呼叫,需要使用 Event Tick 節點。它已經在你的 graph 檢視中了。如果沒有,用前面一樣的方法建立一個。

將 Event Tick 節點的輸出 pin 拖到 AddLocalRotation 節點的輸入 pin。

注:用這種方法,旋轉速度取決於幀率。這意味著機器越慢圓桌的轉速越慢,反之亦然。這對於本教程來說是可以的,因為我讓事情簡單化了,但在後面的教程中我會介紹如何解決這個問題。

最後,點選工具欄上的 Compile 按鈕,更新你的藍圖,然後關閉藍圖編輯器。

將藍圖新增到關卡

在新增藍圖之前,在主編輯器的視口中,刪除香蕉的模型。選擇該模型,點選 Edit\Delete 選單或者按 Delete 鍵。

新增藍圖和新增網格一樣。在檔案上按住左鍵,將它拖到視口中。

點選工具欄上 的 Play 按鈕,看看效果!

注:如果你沒有刪除原有的香蕉模型,你可能會被警告”燈光需要重建“。如果刪掉模型,則錯誤不再顯示。

接下來去哪裡?

在這裡下載完成後的專案。

你已經學完這篇教程,但那只是 Unreal 中極小的一部分。如果你想繼續學習,請閱讀本系列的下一篇教程,我將介紹 Unreal 引擎更多關於藍圖的內容。