UE5 你的第一个游戏 | 技术讲座 | 2022虚幻引擎现状
这份 YouTube 洞见笔记由 LilysAI 生成。免费注册,从视频中以 10× 速度更深入地获取洞见。
Q: 如何在虚幻引擎5中创建你的第一个游戏?
本视频指导你从零开始在虚幻引擎5中创建你的第一个小型游戏,内容包括:构建俯视游戏,导入网格、纹理、动画,制作材质、角色、AI,实现游戏逻辑(如生成收集球体、触发门),并添加效果、声音、摄像机抖动。
如何在 Unreal Engine 5 中從零開始製作遊戲?本教學展示了如何利用 UE5 的新舊功能,快速建立一個包含環境、角色、AI 和互動元素的遊戲。
1. Unreal Engine 5 專案建立與基礎設定
本節介紹如何在 Unreal Engine 5 中建立新專案,設定基礎光照與環境,並匯入第一個自訂資產。1.1. 建立新專案與使用者介面導覽
- 建立新專案時,可以選擇使用預設範本,但本教學從空白專案開始,並將其命名為「first game」。
- 專案中使用的資產來自 Unreal Marketplace 上的 StekoBot 範例專案 。
- 首次開啟專案時,會看到一個已設定好 World Partition 和即時光照的新地圖,但本教學將建立一個完全空白的新地圖 。
- Unreal Engine 5 的使用者介面包含以下主要區域 :
- Viewport:顯示場景。
- Outliner:列出場景中的所有物件。
- Details Panel:顯示選定物件的屬性。
- Modes:包含選擇、地形、植被等模式。
- Create Menu:用於放置各種 Actor。
- Content Drawer:顯示遊戲的資料夾結構,可透過
Ctrl + Space開啟。
1.2. 設定光照與環境
- 首先,在場景中加入一個簡單的 Sphere,雖然一開始可能看不到,但它會出現在 Outliner 和 Details Panel 中 。
- 為了快速設定光照,可以使用 Environmental Light Mixer,它會自動建立 Directional Light、Atmospheric Skylight、Sky and Atmosphere、Volumetric Clouds 和 Height Fog 。
- Directional Light 的強度可以直接調整,並可透過
Ctrl + L改變光照角度 。 - Unreal Engine 5 預設使用即時光照,新專案會啟用新的全域照明系統 Lumen 。
- 為了確保大氣光照也是即時的,需要在 Skylight 中勾選 Real-time Capture 。
- 為了保持場景整潔,可以將光照相關的 Actor 整理到 Outliner 中的資料夾裡 。
- 儲存地圖時,建議建立一個名為「maps」的新資料夾,並將地圖儲存為「valley」以保持內容抽屜的整潔 。
1.3. 匯入第一個自訂資產
- 在 Content Drawer 中建立一個名為「props」的新資料夾,用於存放網格、材質和紋理 。
- 匯入一個在 Blender 中建立的 FBX 資產(例如一個箱子),匯入時選擇建立材質,Unreal Engine 會自動匯入靜態網格和其使用的三個材質 。
- 雙擊網格可以在專屬編輯器中開啟,其中顯示網格資訊和材質插槽 。
- 材質編輯器包含預覽、細節面板和材質圖,可以在其中連接節點來定義材質屬性 。
- 建立材質的步驟如下 :
- 改變顏色並套用,觀察網格上的效果 。
- 按住
1並點擊滑鼠左鍵建立一個單值節點,連接到材質的 Roughness(粗糙度),並套用觀察光澤變化 。 - 匯入灰階的 Grunge Texture 和 Normal Map,將 Normal Map 連接到輸出針腳,為材質增加凹凸細節 。
- 將 Grunge Texture 用於 Roughness,使材質呈現磨損感 。
- 製作金屬材質的步驟如下 :
- 改變顏色使其更亮 。
- 建立一個純量節點,連接到 Metallic 並設定為
1,使其呈現金屬質感 。 - 將 Roughness 設定為
0,使其非常光滑 。 - 匯入金屬的 Normal Map 和 Roughness Texture 。
- 將 Normal Map 連接到輸出,如果紋理太嘈雜,可以使用 Texture Coordinates 節點調整 UV Tiling(例如設定為
5x5)。 - 將 Roughness Texture 的紅色通道連接到 Roughness,因為紋理的不同通道可以儲存不同資訊 。
- 製作碳纖維材質的步驟如下 :
- 匯入 Normal Map 和用於基礎顏色的灰階紋理 。
- Unreal Engine 會自動識別 Normal Map 並設定所需值 。
- 將 Normal Map 連接到輸出,並使用 Texture Coordinate 節點和較高的數值調整 UV Tiling 。
- 將灰階紋理連接到 Base Color,同樣使用 Texture Coordinate 節點調整 UV Tiling 。
- 使用網格的 Vertex Color(頂點顏色),將其與紋理輸出相乘,再連接到 Base Color,以利用預先繪製的灰階值 。
- 建立地板:將場景中的 Sphere 替換為 Cube,並使用縮放工具調整其大小,使其成為一個平面 。
- 將製作好的箱子拖曳到場景中,並調整其位置和旋轉,測試材質在不同光照下的反應 。
2. 藍圖、景觀與植被
本節說明如何使用藍圖建立互動邏輯,製作地形景觀,並利用 Nanite 技術高效渲染大量岩石和植被。
2.1. 藍圖基礎與物理模擬
- 預設情況下,場景中的物件不會有物理反應,但可以在 Details Panel 中勾選 Simulate Physics 使其掉落 。
- 這種設定方式只對單一 Actor 有效,如果複製該 Actor,新的物件不會繼承物理設定,這時就需要使用 藍圖 (Blueprints) 。
- 建立一個名為「game elements」的資料夾,並在其中建立一個基於 Actor 的藍圖,命名為「BP_crate」。
- 藍圖編輯器包含 Viewport、Details Panel、Components List 以及圖形、函數和變數區域 。
- 在 BP_crate 藍圖中,加入一個 Static Mesh Component 並命名為「crate mesh」,然後在 Details Panel 中指定靜態網格為之前製作的箱子 。
- 在藍圖中設定 Simulate Physics、質量、線性阻尼和角阻尼等物理屬性,這樣所有基於此藍圖的箱子都會繼承這些設定 。
- 將藍圖箱子拖曳到場景中,所有藍圖實例都會有相同的預設值,並且在藍圖中修改後,所有場景中的實例也會隨之改變 。
2.2. 建立地形景觀
- 刪除舊地板,進入 Landscape Mode 建立一個新的地形,暫時不調整細節,直接點擊建立 。
- 在 Landscape Mode 中,可以雕刻、繪製或使用 Landmass 工具,並調整筆刷大小、強度和衰減來控制雕刻效果 。
- 建立地形材質:在名為「landscape」的資料夾中建立一個新材質,命名為「M_landscape」。
- 在材質設定中勾選 Fully Rough,使地形沒有光澤 。
- 加入 Landscape Layer Blend 節點,新增「sand」和「grass」兩個圖層,並分別設定為深黃色和深綠色 。
- 回到 Landscape Mode 的 Paint 標籤頁,為每個圖層建立 Weight Blended Info Layer,然後就可以在地形上繪製沙地和草地 。
- 匯入可平鋪的沙地和草地紋理,將其連接到對應的圖層,並使用 Absolute World Position 節點和 Component Mask 調整 UV Tiling,使其與世界座標對齊 。
- 為了保持材質圖的整潔,可以使用 Unreal Engine 5 的新節點 Named Reroute Node,將複雜的連接線命名並簡化 。
- 為了讓草地顏色更豐富,可以使用 Lerp 節點混合兩種不同深淺的綠色,並透過灰階紋理控制混合比例 。
2.3. 植被與 Nanite 岩石
- 生成草地:
- 建立一個名為「environment」的資料夾,匯入草叢的靜態網格和灰階紋理 。
- 製作草地材質:將材質的 Blend Mode 從 Opaque 改為 Masked,並將紋理連接到 Opacity Mask,使黑色部分透明 。
- 複製地形材質中的顏色設定,連接到草地材質的 Base Color 和 Alpha 。
- 在地形材質中加入 Output Grass 節點,並建立一個 Landscape Grass Type 資產,命名為「F_landscape grass」。
- 在 F_landscape grass 中加入草叢網格,調整密度和最小/最大縮放比例 。
- 在 Output Grass 節點中指定草地類型,並使用 Sample Landscape 節點指定在「grass」圖層上生成草地 。
- Nanite 岩石:
- 匯入一個包含 600 萬個三角形的岩石 FBX,在匯入設定中勾選 Build Nanite 。
- Nanite 技術只會渲染所需的三角形數量,可以大幅提升效能 。
- 製作岩石材質:匯入可平鋪的岩石紋理,並使用 Absolute World Position 節點和 Component Mask 調整 UV Tiling,使其與世界座標對齊 。
- 為了避免側面紋理拉伸,可以使用 Vertex Normal 節點的 Z 分量(B 通道)與 Lerp 節點混合兩種紋理,例如岩石紋理和沙地紋理,使頂部和側面呈現不同效果 。
- 為了在場景中大量放置岩石,可以使用 Foliage Tool 。
- 建立一個 Static Mesh Foliage 資產,命名為「F_flat rock」,加入岩石網格,並調整 Z 偏移、表面法線對齊和碰撞設定 。
- 將 F_flat rock 加入 Foliage Tool 的調色盤,調整密度和縮放比例,然後就可以在場景中繪製大量岩石 。
- 即使場景中包含數百萬個三角形的 Nanite 岩石,效能也不會受到明顯影響 。
- 也可以將之前製作的箱子轉換為 Nanite 網格,即使多邊形數量不多,也能從 Nanite 的通用優化中受益 。
- 遷移植被:
- 從其他專案(例如 Starter Bot 範例專案)遷移樹木和蕨類植物,透過右鍵點擊資產,選擇 Asset Action -> Migrate,然後選擇目標專案的 Content 資料夾 。
- 遷移後,新的資料夾會出現在專案中,然後就可以將這些植被加入 Foliage Tool,調整縮放比例和密度,並在地形上繪製 。
3. 遊戲框架與角色控制
本節將建立遊戲框架,設定玩家角色和攝影機,並實作基於滑鼠點擊的角色移動邏輯。
3.1. 遊戲框架設定
- 遊戲開始時,Outliner 中會自動生成一些預設 Actor,例如 Game Mode、Pawn 和 Player Controller,這些都需要替換為自訂的藍圖 。
- 在 Project Settings 的 Game Mode 中,可以定義預設的遊戲模式和啟動地圖,將啟動地圖設定為「valley」。
- 建立一個名為「framework」的新資料夾,並在其中建立以下藍圖 :
- BP_game mode:基於 Game Mode Base。
- BP_bot:基於 Character(Character 是 Pawn 的子類別,具有內建功能)。
- BP_player controller:基於 Player Controller。
- 在 BP_game mode 中,覆寫預設類別,將 Player Controller Class 設定為 BP_player controller,將 Default Pawn Class 設定為 BP_bot 。
- 在 Project Settings 中,將預設的 Game Mode 設定為 BP_game mode 。
- 在場景中放置一個 Player Start Actor,遊戲模式會自動使用它來生成角色,藍色箭頭表示角色的初始方向 。
- 遊戲開始後,角色會出現在 Player Start 的位置,可以透過按鈕從玩家控制器分離,回到編輯器控制 。
3.2. 攝影機設定
- 攝影機可以放置在控制器或角色本身,本教學將其加入 BP_bot 角色 。
- Character 藍圖包含 Capsule Component(用於碰撞和移動)、Arrow Component(顯示前方方向)和 Character Movement Component(控制角色移動)。
- 為了實現俯視視角,在 BP_bot 中加入一個 Spring Arm 元件,然後將 Camera 元件附加到 Spring Arm 上 。
- 調整 Spring Arm 的旋轉和臂長,使攝影機位於角色上方並向下看 。
- 選擇攝影機,將 Field of View 設定為
45°,以獲得等距視角效果 。 - 禁用 Spring Arm 的碰撞檢查功能,避免攝影機因碰撞而調整 。
3.3. 角色移動邏輯
- 遊戲邏輯通常在 Event Graph 中實現,其中包含 Begin Play(生成時觸發)和 Tick(每幀更新)等事件 。
- Print String 節點常用於在螢幕上顯示文字,可以測試事件觸發時機 。
- 由於移動邏輯在 Player Controller 中實現,需要獲取控制器控制的 Pawn(即 BP_bot)。
- 使用 Add Movement Input 節點為角色添加移動輸入,並將其連接到 Tick 事件,設定 X 軸方向為
1,角色就會沿世界 X 軸移動 。 - 為了讓角色朝向滑鼠游標移動,需要獲取滑鼠游標在世界中的位置,可以使用 Get Hit Result Under Cursor by Channel 節點,並從 Hit Result 中獲取 Location 。
- 獲取角色的當前位置(Get Actor Location)。
- 使用 Get Direction Vector 函數,計算從角色位置到滑鼠游標位置的方向向量,並將其連接到 Add Movement Input 的 World Direction 。
- 為了讓滑鼠游標在遊戲中可見,可以在 Player Controller 的 Details Panel 中勾選 Show Mouse Cursor 。
- 為了控制角色只在按下滑鼠按鈕時移動,需要設定輸入綁定 。
- 在 Project Settings 的 Input 中,新增一個 Action Mapping,命名為「toggle movement」,並綁定滑鼠左鍵 。
- 在 Player Controller 的 Event Graph 中,新增「toggle movement」事件,並建立一個布林變數「add movement」。
- 當按鈕按下時,將「add movement」設定為
True;當按鈕釋放時,設定為False。 - 使用 Branch 節點,只有當「add movement」為
True時才執行移動邏輯 。
4. 角色動畫與 AI 控制
本節將為角色匯入骨架網格和動畫,設定動畫藍圖以實現基於速度的動畫混合,並建立 AI 控制器使機器人自動移動。
4.1. 角色骨架網格與材質
- 在 BP_bot 中,將 Skeletal Mesh Component 替換為實際的角色模型 。
- 建立一個名為「character」的新資料夾,匯入包含骨架網格的 FBX 檔案 。
- 匯入時,Unreal Engine 會自動識別為骨架網格,並要求指定骨架。由於是首次匯入,勾選 Import Mesh,並取消勾選 Automatically Generate Physics Asset 。
- 匯入後會生成骨架網格和骨架資產,骨架包含骨骼層次結構,大多數動畫資產都需要參考同一個骨架 。
- 骨架網格可以視為「皮膚」,不同的網格可以共用同一個骨架,它包含材質插槽、LOD 設定等資料 。
- 製作角色材質的步驟如下 :
- 匯入灰階的 Albedo、用於臉部表情遮罩的 Atlas 和 Normal Map 。
- 將 Albedo 連接到 Base Color 。
- 使用 Blend Overlay 節點混合顏色參數,設定為亮橘色,為角色添加顏色 。
- 匯入包含金屬度(紅色通道)、粗糙度(綠色通道)和環境光遮蔽(藍色通道)資訊的紋理,並連接到對應的針腳 。
- 使用遮罩紋理的綠色通道和 Lerp 節點,將橘色部分與金屬部分分離,並為金屬部分設定灰色 。
- 匯入 Normal Map 並連接,然後使用遮罩紋理的紅色通道和乘法節點,將其連接到 Emissive Output,並設定為淺藍色,為角色添加發光部分 。
- 臉部材質:將背景紋理連接到 Emissive Color 。
- 使用 Add 節點將臉部表情 Atlas 紋理的 Alpha 通道添加到背景紋理上,並透過乘法節點和淺藍色控制顏色 。
- 使用 Flipbook 節點來選擇 Atlas 中的臉部表情,並透過純量參數控制行數和列數(例如
4x4),以及選擇特定的表情 。
4.2. 角色移動調整與動畫藍圖
- 在 BP_bot 中,將骨架網格設定為之前匯入的角色模型,並調整其位置和旋轉,使其與膠囊體對齊 。
- 調整膠囊體的大小,使其更符合角色模型 。
- 為了讓角色朝向移動方向,在 Character Movement Component 中勾選 Orient Rotation to Movement,並調整旋轉速度 。
- 為了讓攝影機保持固定,在 Spring Arm 中將旋轉設定從 Relative 改為 World Aligned 。
- 調整 Character Movement Component 的屬性,例如加速、最大步高、可攀爬角度、最大速度、地面摩擦力和停止速度,以實現更流暢的移動感 。
- 建立一個名為「animations」的新資料夾,匯入閒置、走路和跑步的三個動畫 FBX 檔案 。
- 匯入時,選擇專案中已有的骨架,並取消匯入網格 。
- 建立一個 Animation Blueprint,基於角色的骨架,命名為「ABP_Bot」。
- 在 Animation Blueprint 的 Anim Graph 中,拖曳閒置動畫並連接到 Output Pose,然後在 BP_bot 的骨架網格元件中指定動畫藍圖為 ABP_Bot,角色就會播放閒置動畫 。
- 為了實現基於狀態的動畫,在 Anim Graph 中使用 State Machine,命名為「locomotion」,並連接到 Output Pose 。
- 在 State Machine 中,建立「idle」和「walk run」兩個狀態,並設定它們之間的轉換 。
- 在「idle」狀態中放入閒置動畫,在「walk run」狀態中放入走路動畫 。
- 在 Animation Blueprint 的 Event Graph 中,使用 Update Animation 事件和 Try Get Pawn Owner 節點獲取角色 Pawn 。
- 透過 Get Velocity 節點獲取角色的速度向量,然後使用 Vector Length X Y 節點獲取地面速度(忽略 Z 軸),並將其儲存到名為「ground speed」的變數中 。
- 在從「idle」到「walk run」的轉換規則中,設定條件為「ground speed」大於
0。 - 在從「walk run」到「idle」的轉換規則中,設定條件為「ground speed」小於或等於
5。 - 為了實現走路和跑步動畫的平滑混合,建立一個 Blend Space 1D 資產,基於角色的骨架,命名為「BS_walk run」。
- 在 Blend Space 中,將軸命名為「speed」,最大值設定為
400,然後將走路和跑步動畫拖曳到軸上 。 - 使用 Unreal Engine 5 的 Analyst 功能,選擇 Locomotion 作為軸函數,並指定左右腳骨骼(foot L, foot R),然後點擊 Analyze,系統會自動匹配動畫到軸上的正確點,減少腳部滑動 。
- 在 Anim Graph 的「walk run」狀態中,將走路動畫替換為 BS_walk run,並將「ground speed」變數連接到 Blend Space 的速度軸 。
4.3. AI 控制器
- 由於遊戲框架設計為控制器控制角色,因此 AI 控制器也可以作為角色的「大腦」。
- 建立一個基於 AI Controller 的藍圖,命名為「BP_AI controller」。
- 在 BP_AI controller 的 Event Graph 中,使用 AI Move To 函數來給予 AI 移動指令 。
- 為了在遊戲開始幾秒後觸發移動,使用 Set Timer by Event 函數,設定為
3秒,並建立一個名為「move」的自訂事件 。 - 將 AI Move To 函數連接到「move」事件,並將 Pawn 連接到 Target Pawn 。
- 在場景中選擇 AI 機器人,將其 AI Controller Class 設定為 BP_AI controller 。
- 為了讓 AI 能夠移動,需要導航數據。在 Create Menu 中搜尋 Nav Mesh Bounds Volume,並將其放置在 AI 可移動的區域,調整大小,按下
P鍵可以顯示或隱藏導航網格 。 - 遊戲開始後,AI 機器人會在
3秒後開始朝預設目標(0,0,0)移動 。 - 為了讓 AI 機器人有不同的顏色,可以在 BP_bot 的 Construction Script 中設定 。
- 獲取網格元件,使用 Create Dynamic Material Instance 節點在元素
0(身體材質)上建立動態材質實例 。 - 使用 Set Vector Parameter Value 節點設定名為「color」的材質參數,並將其提升為變數,勾選「可編輯實例」圖示,這樣每個 AI 機器人都可以有不同的顏色 。
5. 遊戲邏輯與互動元件
本節將新增遊戲道具,實作 AI 收集物品的邏輯,並建立壓力板與門的互動系統。
5.1. 物品生成與 AI 收集
- 匯入牆壁、門、光球和壓力板的網格,這些網格會自動使用之前建立的材質 。
- 建立一個基於 Actor 的藍圖,命名為「BP_orb」。
- 在 BP_orb 中,將光球網格拖曳到場景中,使其自動建立 Static Mesh Component,並將其設定為根元件 。
- 在 Details Panel 中,將光球的碰撞設定為只與 Pawn 重疊 (Overlap with Pawns Only) 。
- 為了讓玩家生成光球,在 Project Settings 的 Input 中新增一個 Action Mapping,命名為「spawn orb」,並綁定空白鍵 。
- 在 Player Controller 的 Event Graph 中,新增「spawn orb」事件,並在釋放時使用 Spawn Actor From Class 函數生成 BP_orb 。
- 將生成位置設定為玩家角色當前的位置(Get Actor Location),這樣玩家就可以在遊戲中生成光球 。
- 為了讓 AI 收集光球,在 BP_AI controller 中建立一個名為「find orb」的函數,該函數會輸出是否找到光球(布林值)和找到的光球 Actor 。
- 在「find orb」函數中,使用 Get All Actors Of Class 節點獲取場景中所有的 BP_orb,然後檢查列表長度是否大於
0。 - 如果找到光球,則返回
True和列表中的第一個光球;如果沒有,則返回False。 - 將「find orb」函數設定為 Pure 函數,這樣它就不需要執行針腳,但每次需要值時都會執行 。
- 在 BP_AI controller 的 Event Graph 中,如果「find orb」成功,則執行 AI Move To 函數,目標設定為找到的光球 Actor 。
- 為了讓 AI 持續尋找光球,將 Set Timer by Event 函數設定為循環模式,每
3秒檢查一次 。 - 為了讓 AI 收集光球後光球消失,在 BP_orb 中使用 Begin Overlap 事件 。
- 透過 Cast To Pawn 節點獲取重疊的 Actor,並檢查它是否由玩家控制(Is Player Controlled)。
- 如果重疊的 Pawn 不是由玩家控制(即 AI 機器人),則銷毀光球 。
5.2. 壓力板與門的互動
- 建立一個基於 Actor 的藍圖,命名為「BP_pressure plate」。
- 在 BP_pressure plate 中,將框架和平台網格拖曳到場景中,將框架設定為根元件 。
- 加入一個 Box Collision 元件作為觸發器,調整其大小以覆蓋所需區域 。
- 為 Box Collision 添加 Begin Overlap 和 End Overlap 事件,並使用 Print String 節點測試觸發效果 。
- 為了實現壓力板的升降動畫,使用 Timeline,命名為「plate animation」,長度設定為
0.5秒 。 - 在 Timeline 中添加一個 Float Track,設定兩個關鍵幀:
0秒時值為0,0.5秒時值為1。 - 獲取平台網格,使用 Set Relative Location 節點,將 Timeline 的輸出值與
-10相乘,並連接到 Z 軸,使平台在觸發時下降10個單位 。 - 在 Begin Overlap 時播放 Timeline,在 End Overlap 時反向播放 Timeline 。
- 建立一個基於 Actor 的藍圖,命名為「BP_door」。
- 在 BP_door 中,將牆壁框架和兩個門網格拖曳到場景中,將框架設定為根元件 。
- 為了方便門的移動,為每扇門建立一個 Scene Component 作為錨點(例如「anchor_L」和「anchor_R」),將門網格附加到錨點下,並將門的相對位置歸零 。
- 在 BP_door 的 Event Graph 中,建立兩個自訂事件:「open door」和「close door」。
- 使用 Timeline,命名為「door animation」,長度設定為
0.5秒,並調整曲線使其具有更流暢的滑動效果 。 - 獲取兩扇門元件,使用 Set Relative Transform 節點,將 Timeline 的輸出值與
-70相乘,並連接到 Y 軸,使門向外滑動 。 - 「open door」事件播放 Timeline,而「close door」事件反向播放 Timeline 。
- 為了實現壓力板與門的通訊,建立一個基於 Actor Component 的藍圖,命名為「BP_interaction component」。
- 在 BP_interaction component 中,建立兩個自訂事件:「start interaction」和「stop interaction」。
- 建立一個 Event Dispatcher,命名為「on interaction」,並添加一個布林變數「on」。
- 在「start interaction」中呼叫 on interaction 並設定「on」為
True,在「stop interaction」中呼叫 on interaction 並設定「on」為False。 - 在 BP_pressure plate 中添加 BP_interaction component 。
- 在 Begin Overlap 時呼叫 BP_interaction component 的「start interaction」並播放動畫,在 End Overlap 時呼叫「stop interaction」並反向播放動畫 。
- 在 BP_door 的 Begin Play 事件中,建立一個名為「trigger」的 Actor Object Reference 變數,並勾選「可編輯實例」。
- 檢查「trigger」變數是否有效,然後使用 Get Component By Class 節點獲取其上的 BP_interaction component 。
- 如果 BP_interaction component 有效,則將自訂事件分配給其 on interaction Event Dispatcher 。
- 在分配的自訂事件中,使用 Branch 節點根據 on interaction 的布林值決定是呼叫「open door」還是「close door」。
- 在場景中選擇門,將其「trigger」變數設定為壓力板 。
- 這樣,當玩家或 AI 機器人踩上壓力板時,門就會打開或關閉 。
6. 效果、音效與攝影機震動
本節將為遊戲添加視覺效果、音效和攝影機震動,以提升遊戲體驗。
6.1. 腳步塵土效果
- 建立一個名為「effects」的資料夾,並在其中建立一個空的 Niagara System,命名為「FX_dust」。
- 在 Niagara 編輯器中,將系統設定為只播放一次,不循環 。
- 添加一個空的 Emitter,並在 Emitter Update 中添加 Spawn Burst,設定生成
10個粒子 。 - 在 Particle Spawn 中設定粒子屬性 :
- 顏色:設定為沙子般的黃色。
- 大小:使用 Random Uniform 設定為
2到4之間。 - 質量:隨機化質量,用於稍後引入的重力。
- 速度:添加初始速度,並將方向設定為
-1以適應角色。
- 在 Particle Update 中,添加 Scale Sprite Size 模組,設定粒子在生命週期結束時放大到
15。 - 添加 Curl Noise 模組,增加強度,使粒子移動更具混沌感 。
- 添加 Gravity Force 模組,將 Z 軸重力設定為正值,使粒子向上飄散 。
- 添加 Scale Color 模組,將 Alpha 值設定為曲線,使粒子在生命週期結束時逐漸淡出 。
- 在角色的跑步動畫(run animation)中,找到腳部觸地時刻,在 Notify 軌道上添加 Play Niagara Particle Effect 通知 。
- 選擇 FX_dust 效果,並將 Bone or Socket Name 設定為對應的腳部骨骼(例如「foot R」和「foot L」),使塵土效果在腳步觸地時生成 。
6.2. 腳步音效
- 建立一個名為「audio」的資料夾,並在其中建立一個 MetaSound Source 資產,命名為「SFX_footstep」。
- 在 MetaSound 編輯器中,使用 White Noise 節點生成白噪音 。
- 添加 Envelope 節點來控制噪音的音量,並將其輸出與噪音相乘,然後連接到輸出 。
- 調整 Envelope 的攻擊時間和曲線,使音效有淡入淡出的效果 。
- 添加 Square Generator 節點,設定非常低的頻率,並將其與噪音相加,然後再與 Envelope 相乘,以創造更豐富的音效 。
- 調整 Pulse Width 並將噪音音量乘以
0.1,以平衡音效 。 - 在角色的跑步動畫中,添加新的 Notify 軌道,並在腳部觸地時刻添加 Play Sound 通知 。
- 選擇 SFX_footstep 音效,這樣角色在跑步時就會發出腳步聲 。
6.3. 攝影機震動
- 在「effects」資料夾中,建立一個基於 Camera Shake Base 的藍圖類別,命名為「Camera Shake」。
- 在 Camera Shake 藍圖中,選擇 Perlin Noise 作為震動類型 。
- 調整震動的持續時間(例如
0.01秒)、淡入淡出時間(例如0.01和0.05秒)。 - 設定位置振幅為
8,頻率為12。 - 在 BP_door 的 Event Graph 中,當門被移動時(例如在 Timeline 更新時),添加 Play World Camera Shake 節點 。
- 將震動的震央位置設定為門的 Actor Location,並將影響半徑設定為較大的數值,使震動影響整個場景 。
- 這樣,當門打開或關閉時,攝影機就會產生震動效果 。
6.4. 總結
- 本教學展示了如何在 Unreal Engine 5 中從零開始製作一個小型遊戲,涵蓋了匯入資產、材質製作、藍圖邏輯、地形與植被、Nanite 技術、角色動畫、AI 控制、互動元件、視覺效果、音效和攝影機震動等多個方面 。
- 專案中使用的資產來自 Unreal Marketplace 上的 Steampunk Bot 範例專案 。
- 建議學習者可以參考 Lyra 啟動遊戲專案,或加入開發者社群以獲取更多學習資源 。
像天才一样理解海量资料——与 LilysAI 一起
超过 1,000,000 名知识探索者正在使用 Lilys AI。
