主頁 >  其他 > 虛幻引擎 4 學習筆記 [1] :藍圖編程 Demo

虛幻引擎 4 學習筆記 [1] :藍圖編程 Demo

2023-04-14 08:50:16 其他

虛幻引擎 4 學習筆記 [1] :藍圖編程 Demo

? 最近學習虛幻引擎,主要看的是 Siki 學院的課,課程鏈接:Unreal藍圖案例 - 基礎入門 - SiKi學院|SiKi學堂 - unity|u3d|虛幻|ue4/5|java|python|人工智能|視頻教程|在線課程 (sikiedu.com)

? 以下為課程筆記:

1. 創建工程

? 選擇藍圖,不帶初學者內容包

2. 創建關卡1

image-20230319171316540

image-20230319171357200

3. 設計關卡1

? 添加初學者內容包,可以使用一些里面的材質,紋理

image-20230323112313346

3.1 地形

  1. 選擇 Geometry -> Box 更好地設定地形

    image-20230320114552568

  2. 鋪設地板不能直接拖拽該 Actor,不然相應的貼圖也會發生變形,可以使用 Brush Settings 來壓縮地板塊和改變長寬

    image-20230320114803238

    image-20230320115125986

  3. 也可以使用 Brush Editing 模式來編輯地形

    image-20230320115228127

    將該物體長度拖到 2000 ,調回放置模式,按 alt 快捷復制三個一樣的板塊,中間間隔 1000

    image-20230320121511977

  4. 堆砌墻面

    image-20230320133110010

    在 Brush Editing 模式下拉長墻面

    image-20230320194759465

    在放置模式下復制墻面:

    image-20230320234818821

  5. 給添加的 Actor 按 F2 進行重命名

    image-20230320235053780

    添加檔案夾進行規整:

    image-20230320235230696

  6. 設計獨木橋

    使用 Edit 和 Extrude,使用 Edit 來使板子傾斜,利用 Extrude 可以增加一些拐角和軸,使用時點擊 Actor 的面

    image-20230323002433873

    image-20230323003530753

    選擇模式下復制做好的獨木橋,并將其旋轉后拖入第二個空隙

    image-20230323003804079

  7. 給城墻添加材質

    image-20230323170254226

    1)選中想要添加的材質,點擊左箭頭符號直接運用

    image-20230323170402539

    2)點擊 Surface Materials 里的下拉框搜索相關材質,然后運用

    image-20230323170505853

    點擊 Select All Ajacent Surfaces 將選中材質附加到當前 Actor 的所有面

    image-20230323170651424

    image-20230323170852134

    運用后發現磚塊材質過細,選中該 Actor 的所有面,將縮放調為 8 倍,點擊 Apply

    image-20230323171056672

    image-20230323171202636

    使用相同的方法為另一邊城墻附加材質

    image-20230323171331881

  8. 為三塊地板添加材質

    image-20230323171603586

    image-20230323171626942

  9. 為橋附加材質

    image-20230323171754586

3.2 燈光

  1. 關閉游戲的自動曝光:Settings -> Projevt Settings -> Rendering -> Default Settings -> Auto EXposure

    image-20230320235522288

    image-20230320235902473

  2. 添置平行光,除錯亮度,放置到中間,使用動靜結合的方式,Build -> Build Lighting Only

    image-20230322204642181

    image-20230322205114509

  3. 添置天空光照

    image-20230323165219782

  4. 添置聚光燈

    image-20230322213946932

    image-20230322214337532

  5. 規整結構

    image-20230322214747574

3.3 火炬

  1. 制作火炬的椎體:

    image-20230323180445015

    image-20230323180500984

  2. 添置火焰:初學者內容包 StarterContent -> Particles -> P_Fire

    1)通過三視圖調整火焰的位置

    image-20230323181753551

    image-20230323182754128

    image-20230323182735704

    2)調整火焰的角度

    image-20230324002113122

  3. 為火焰添加墻壁的反射光

    1)調整引數

    image-20230324004710141

    2)調整點光源位置使與火焰同一位置

    • 直接拷貝位置

      image-20230324004903190

    • 手動調整位置

    image-20230324003046574

  4. 將創建的火炬轉換為靜態網格

    image-20230324004012394

  5. 將子物體附著到火炬下

    image-20230324004226636

  6. 將火炬及子物體轉換為藍圖類:

    選中所有需要轉換的物體,點擊 Blueprints -> Convert Selection to Blueprint Class...

    image-20230324005240906

    image-20230324235116148

    image-20230324235215805

  7. 轉換為藍圖類后,該火炬可以很方便的整體調節引數,也可以單獨調整一個

    image-20230324235248946

  8. 快速復制擺放六個火炬:

    image-20230325000007412

    image-20230324170237326

  9. 修改藍圖類組件的名字

    image-20230325000359765

3.4 可收集物

3.4.1 創建可收集物的藍圖類

  1. Add/Import -> Blueprint Class 創建藍圖類

    image-20230324175316906

  2. 選擇 Actor 作為父類

    image-20230324175538259

  3. 添加組件:Satic Mesh

    image-20230325150826231

  4. 選擇靜態網格的形狀

    image-20230325151013339

  5. 按住 Ctrl + w 復制網格體出來

    image-20230325151132647

  6. 將下半部分的靜態網格進行翻轉

    image-20230325151301063

  7. 為了使寶石的兩邊變成一個整體,可以將寶石的下半部分變為上半部分的子物體

    image-20230325151433745

  8. 修改寶石的縮放

    image-20230325151614605

  9. 將水晶上下部分的碰撞設定為 NoCollision,防止后面水晶飛向玩家時將玩家擊飛

    image-20230326222354721

3.4.2 給可收集物建立發光材質并添加水晶光照

  1. 創建材質:右鍵 -> Material

    image-20230325151955003

  2. 在材質編輯器里新建結點的四種方法:

    1)隨機右鍵一個區域,輸入想要創建的結點,進行連線

    image-20230325152653843

    2)從 M_Crystal 里直接拖拽出來一根線

    image-20230325152806696

    3)從 Palette 目錄里拽出一個結點

    image-20230325152858928

    4)在某些結點邊上會寫上快捷鍵,如:按住 3,滑鼠左鍵點擊一下就會創建一個結點

    注意:按 alt 再左鍵點擊一條線可以斷開該線

  3. 選擇材質的顏色

    image-20230325194448336

  4. 對顏色進行增強:在顏色結點拉出另一條線搜索 Multiply 函式,修改 B 的值為 5

    點擊 Apply,點擊 Save

    image-20230325194614243

    image-20230325194831457

  5. 修改水晶的材質為設定好的材質

    image-20230325195133265

  6. 添加水晶的光照

    1)在水晶藍圖類內部添加點光源的組件

    image-20230325195310138

    2)設定點光源的引數

    image-20230325195544465

  7. 為水晶藍圖類添加旋轉組件:Rotationg Movement

    image-20230325200404593

    設定旋轉速度:

    image-20230325201345179

3.4.3 使水晶可以被玩家收集

  1. 為 BP_Crystal 添加一個球形碰撞

    image-20230326203855377

  2. 將添加的球形碰撞(即觸發器)移動到根物體:

    image-20230326203946941

  3. 修改球形碰撞的 Sphere Radius,使其完整包裹住水晶

    image-20230326204044976

  4. 添加簡單的事件函式(此時可以簡單控制玩家靠近水晶即銷毀):只有當玩家靠近水晶才會被銷毀

    image-20230326204531613

3.4.5 添加水晶飛向玩家的影片

插值函式 Lerp:Alpha的數值范圍是0到1,

image-20230326210034111

if(Alpha==0) ReturnValue=https://www.cnblogs.com/XiuzhuKirakira/archive/2023/04/13/A
if(Alpha==1) ReturnValue=B

如果Alpha在0到1之間,Alpha值越接近0則ReValue的值越接近A,Alpha值越接近1則ReValue的值越接近B

  1. 添加 Lerp 插值函式,通過 Alpha 的值來決定回傳值

    image-20230326210034111

  2. 添加 SetActorLocation 函式來設定水晶的位置

    image-20230326220537324

  3. 添加時間軸

    image-20230326220822107

  4. 雙擊時間軸設定屬性:

    由于需要通過時間軸的回傳值來設定 Alpha,所以選擇浮點值:

    image-20230326220949891

    水晶飛過來的值設定為 0.75

    image-20230326221026147

  5. 按住 shift 在淺色區點出兩個點,設定第一個點的時間為 0 ,回傳 0,第二個點的時間為 0.75,回傳 1

    image-20230326221302967

    點擊全視窗展示

    image-20230326221519057

    也可以右鍵使該直線變為曲線:

    image-20230326221615269

  6. 設定好時間軸之后開始連線:設定時間軸讓 Alpha 的值隨著時間改變,B 的位置即為 玩家的位置,A 的位置則為水晶最開始的位置,當 Alpha 最開始為 0,水晶位置不變,當 Alpha 緩慢變到 1,水晶的位置慢慢移到玩家所在的位置,最后再銷毀水晶

    image-20230326223029163

  7. 獲得水晶最開始的位置:

    添加 GetActorLocation 函式,該函式實時獲得水晶的位置,由于水晶一直在移動,所以水晶最開始的位置需要用一個變數暫存:

    • 右鍵 Return Value,選擇 Promote to Variable 創建一個變數

      image-20230326223430926

      image-20230326223617407

    • 連線,使運行時間軸之前保存水晶的位置:

      image-20230326223825226

    • 最后將保存的水晶的最初位置輸入 Lerp 插值函式的 A 處

      image-20230326223906067

      這樣看起來線太復雜,也可以直接獲取變數值再連接,獲取變數的值的方法如下:

      • 將左側的變數直接拖出到 A 處可以自動連上

        image-20230326224132782

      • 將變數拖到空白位置,選擇 Get,手動連線

        image-20230326224210090

      • 按住 alt 鍵,拖出變數直接是 Set

      • 按住 ctrl 鍵,拖出變數直接是 Get

    image-20230326224406098

  8. 最后進行測驗,將 BP_Crystal 的 Trigger 的范圍擴大(使影片效果更明顯),然后放置一些道具水晶

    image-20230326225929133

3.4.6 制作水晶被收集時大小和亮度的變化

大小變化

  1. 添加 Lerp 插值函式,通過 Alpha 的值來決定回傳值

  2. 添加 Set Actor Scale 3D 函式來設定水晶的大小

    image-20230326230712834

  3. B 端直接為 0,A 端可能還需要暫存一下:

    image-20230326231026589

  4. 新添加一條時間軸

    image-20230326231140411

  5. 為了營造忽閃忽閃的感覺,可以在時間軸上多點幾個點,設定起伏,最后選中所有的點平滑一下曲線

    image-20230326231712194

  6. 進行連線

    image-20230326232101449

亮度變化

  1. 暫存亮度:

    image-20230327125616753

  2. 添加時間軸

    image-20230327125818105

  3. 連線:

    image-20230327130420882

3.5 添加主角——鋼球

3.5.1 創建藍圖類

  1. 創建藍圖類,選擇父類為 Pawn

    image-20230325202456902

  2. 添加靜態網格組件,指定為球體

    image-20230325202709686

    image-20230325202852002

  3. 設定鋼球的材質

    image-20230325203032878

  4. 如何將藍圖視口中的導航小球去掉:將 Player 拖到 DefaultSceneRoot 處

    image-20230325203241786

  5. 為鋼球添加相機跟隨:

    1)添加組件:SpringArm,即類似于相機桿,將其移動到球體中心

    image-20230325203604714

    設定

    2)添加組件:Camera,一般添加后會自動吸附到 SpringArm 上,如果沒有吸附的話,可以調整坐標都為 0,即之后會自動調整

    image-20230325204254414

    3)調整視角

    image-20230325204453787

    4)調整攝像機距離鋼球的長度

    image-20230325204913795

    5)設定 Spring Arm 相對于世界 60 度,而不是相對于小球 60 度,防止之后視角隨小球滾動而滾動

    image-20230326172727703

    6)關閉相機的碰撞:

    image-20230326172919996

3.5.2 使 Player Controller 持有本地 Player

  1. 在 Play 模式下如何退出?

    1)按 esc

    2)按 shift+F1 跳出 ViewPoint 的控制,點擊 Possess or Eject Player 回到可以編輯的模式

    image-20230325210338126

  2. 如何使 Player Controller 持有本地 Player

    1)直接將 Auto Possess Player 設定為 Player 0 (不推薦這種方式)

    image-20230326104011256

    2)利用 Player Start 設定玩家起始位置,然后在游戲運行時虛幻引擎會在 Player Start 的位置自動生成一個指定的 Pawn,然后讓 Player Controller 去持有 Player

    • 放置一個 Player Start,手動調整使其貼地,也可以放在空中,然后按下 fn+end

      image-20230326105545619

    • 自定義 GameMode:創建一個藍圖類,設定父類為 Game Mode Base

      image-20230326105659630

      將 Default Pawn Class 設定為 BP_Player

      image-20230326105838499

    • Project Settings -> Maps & Modes ->Deafault GameMode 設定為自己的 BP_GameMode

      image-20230326110048245

3.5.3 按鍵映射與輸入控制

控制玩家移動:設定 BP_Player 的事件

1)將默認的三個事件全部洗掉

2)兩種接收鍵盤輸入的方式:

  • 右鍵點擊輸入搜索結點:

    image-20230326111019188

    系結按下的函式:

    image-20230326111525312

    這樣的弊端:按下 w 只呼叫一次函式,并不會一直執行,而是按一次顯示一次,所以這種方法不推薦

  • Project Settings -> Input -> Axis Mapping -> +

    image-20230326165938047

    添加鍵盤映射:

    image-20230326170124546

    在藍圖內添加軸映射的結點

    image-20230326170327093

3.5.4 使小球轉動起來

  1. 使小球有一個物理性質

    image-20230326172605579

  2. 獲得小球的資料體:將 Components 中的 Player 拖出來,選擇 Get Player

    image-20230326172023514

    image-20230326172114107

  3. 給小球添加力矩

    image-20230326172206938

    右鍵 Torque 選擇 Split Struct Pin 將 x y z 值分開

    image-20230326172232022

  4. 施加 y 方向的力矩,注意勾選 Accel Change 忽略小球本身的質量,否則加強系數需要設定得非常大

    image-20230326173600193

  5. 施加 x 方向的力矩

    image-20230326173849457

  6. 給小球施加摩擦力

    image-20230326174450613

3.5.5 設計失敗觸發器

  1. 創建藍圖類

    image-20230326174704355

  2. 添加碰撞盒子組件

    image-20230326174801129

  3. 將碰撞盒子放置在關卡中間,調整縮放

    image-20230326175233367

    image-20230326175329649

  4. 在 BP_FailTrigger 內添加 ActorBeginOverlap 事件

    image-20230326175558067

  5. 添加小球失敗的邏輯:當小球掉下接觸到碰撞盒子,獲得當前關卡的名字,重新打開一次當前關卡

    image-20230326175915998

  6. 添加一些容錯判斷:只有當掉落物體為 Player 的時候才能出發重新打開關卡

    注意:按住 B + 滑鼠左鍵點擊一下就可以放置一個分支

    image-20230326180508421

    image-20230326180900861

3.5.6 給小球失敗添加一個淡入淡出的效果

當小球掉落時,添加一個從 0-1 的漸變程序

  1. 在 BP_FailTrigger 添加相機的淡入淡出功能,設定保持黑暗 1 秒,注意必須設定 Delay 才會延時

    image-20230326182343359

當游戲開始時,添加一個從 1-0 的漸變程序

  1. 在 BP_Player 中添加 BeginPlay 事件,添加攝像機的淡入淡出函式

    image-20230326182934022

3.5.7 按 ESC 游戲退出

image-20230413123426883

3.6 可發射的子彈

3.6.1 創建

  1. 創建子彈的藍圖類

    image-20230327214012547

  2. 添加組件:

    image-20230327214210677

  3. 設定網格體的形態和材質

    image-20230327215109699

  4. 添加 Projectile 組件

    image-20230327215755150

  5. 設定 Projectile 的引數:投擲速度和重力影響

    image-20230327220101944

3.6.2 添加粒子效果

  1. 添加粒子組件

    image-20230327220453337

  2. 設定粒子效果:

    image-20230327220635450

  3. 縮小子彈使粒子效果更明顯:

    image-20230330142629045

  4. 雙擊 P_Sparks 進入粒子系統修改粒子效果:

    通過勾選或直接右鍵 Emitter->Delte Emitter 將電火花洗掉

    image-20230328141418639

    image-20230328141442869

3.6.3 子彈擊中其他物體時的操作

  1. 添加球形碰撞,使用球形碰撞代替根部的小球

    image-20230328142932898

  2. 調整球形碰撞的范圍

    image-20230328143104327

  3. 調整球形碰撞的 Collision Presets 為 BlockAll

    image-20230328143644489

  4. 添加子彈擊中事件

    image-20230328144312590

3.6.4 創建炮臺和炮管

  1. 直接匯入炮臺和炮管的模型:

    選擇不創建材質

    image-20230328145131228

  2. 同時選中炮臺和炮管放置到關卡中:

    image-20230328152255359

  3. 將炮管設定為可移動的

    image-20230328223647452

  4. 將炮管依附在炮臺底下:

    image-20230328223951915

  5. 創建藍圖類:

    image-20230328224523024

    image-20230328224600990

  6. 設定炮臺和炮管的材質:

    image-20230328224816521

    image-20230328224851194

  7. 控制內容瀏覽器中預覽圖的大小:按住 ctrl + 滑鼠滾動

  8. 編輯預覽圖中的物體:View Options -> 勾選 Thumbnail Edit Mode,然后像操作視口一樣操作預覽圖中的物體

    image-20230328225019783

3.6.5 使炮臺生成可回圈發射的子彈

  1. 添加 Arrow 組件:

    箭頭的基部作為炮彈生成的地方,箭頭的方向即為炮彈發射的方向

    image-20230328230228870

    image-20230328231216858

  2. 添加 SpawnActor BP Projectile 函式,選擇 BP_Projectile 作為藍圖類

    image-20230330142231579

  3. 連線,使回圈發射子彈

    雙擊連線可以重定位結點

    image-20230402203315088

3.6.6 創建開火影片

  1. 創建時間軸設定炮管在 Y 軸的位置

    image-20230403122423497

    image-20230403122505616

  2. 連線:

    注意:

    • 影片從開始播放:Play from Start
    • 播放完成后再發射子彈

    問題:延時 1 秒 + 影片 0.3 秒時間變長了

    image-20230403123009322

3.6.7 時間軸的事件軌道與開火特效

達成效果:先生成子彈再播放影片

  1. 重新連線

    image-20230403211713894

達成效果:解決延時 1 秒 + 影片 0.3 秒時間變長了的問題

  1. 添加 Event Track

    image-20230403212010705

  2. 使時間軸剛開始時生成一個執行的針腳,用來后續的連線

    image-20230403212153484

  3. 重新連線,此時會在影片剛開始播放時就進入發射子彈的邏輯,就不用包含影片播放的 0.3 秒

    image-20230403212400856

開火特效

  1. 添加 Particle System

    image-20230403213202411

  2. 復制炮彈生成的位置并粘貼

    image-20230403213330980

  3. 指定爆炸效果:

    image-20230403213458216

  4. 對爆炸效果進行縮放

    image-20230403214537457

  5. 關閉自動激發

    image-20230403214637798

  6. 連線:

    image-20230403215015178

3.6.8 子彈擊中小球造成傷害

  1. 給 BP_Projectile 添加傷害函式:

    image-20230403233312089

  2. 將 BP_FailTrigger 中的淡入淡出效果拷貝粘貼過來,給 BP_Player 添加傷害事件,即當小球被打到之后重新開始關卡

    image-20230404111949464

    image-20230404210637103

4. 藍圖整理

4.1 子圖與函式

4.1.1 子圖

? 將相同操作收縮為一個結點,相當于創建了一個檔案夾放入這些類似操作

  1. 選中類似的操作:

    image-20230404211440327

  2. 右鍵選擇 Collapse Nodes

    image-20230404211503696

    image-20230404211643315

注意:該方法不能實作代碼復用,不常用

4.1.2 函式

  1. 選中類似的操作:

    image-20230404211440327

  2. 右鍵選擇 Collapse to Function

    image-20230404211911712

    image-20230404212008348

  3. 繼續收縮

    image-20230408213420322

    image-20230408213850101

  4. 繼續收縮

    image-20230409224609156

    image-20230409224710332

  5. 繼續收縮

    image-20230409224810190

    image-20230409224843062

4.2 宏與宏庫

4.2.1 宏

函式缺點:具有多個執行流輸出的不適合收縮為函式

image-20230408214252804

  1. 選中類似操作收縮為宏:

    image-20230409175229054

  2. 在此處可以調整宏里面結點針腳的順序和名稱

    image-20230409181419265

  3. 為輸出流增加執行針腳:

    image-20230409181509553

    image-20230409181548693

  4. 收縮后如下所示:

    image-20230409181848368

4.2.2 藍圖宏庫

藍圖宏庫(Blueprint Macro Library) 是一個容器,它包含一組 宏 或自包含的圖表,這些圖表可以 作為節點放置在其他藍圖中,它們可以節省時間,因為它們可以存盤常用的節點序列, 包括執行和資料傳輸所需的輸入和輸出,

? 宏在參考它們的所有圖表之間共享,但是它們會自動擴展到圖表中, 就像它們在編譯期間是一個折疊節點那樣,這意味著藍圖宏庫不需要編譯,但是, 對宏的更改僅反映在重新編譯包含這些圖表的藍圖時 參考該宏的圖表中,

藍圖宏庫

  1. 創建藍圖宏庫:

    1)創建檔案夾:Library

    image-20230409182450157

    2)添加藍圖宏庫

    image-20230409182545379

    image-20230409182559549

  2. 將剛才創建的宏中的結點賦值拷貝過來(除了輸入輸出結點都要復制)

    image-20230409183518048

  3. 連線,設定輸入輸出結點

    image-20230409183753689

  4. 使用方法:可以直接搜索該宏

    image-20230409184014669

4.2.3 藍圖宏庫的使用

  1. 將重入關卡的結點拷貝到藍圖宏庫中保存為新的宏

    image-20230409184659758

  2. 將所有涉及重入關卡的地方使用該宏替換

    image-20230409184745479

  3. 將攝像頭淡入的操作封裝為宏

    image-20230409191733369

  4. 進行替換

    image-20230409192006499

    image-20230409192052542

  5. 使手動可以設定 Duration 的值

    image-20230409192314350

4.3 暴露藍圖變數

  1. 將專案中意義不明或者模糊處替換為變數,取一個合適的變數名

    image-20230409193206066

  2. 暴露變數

    image-20230409193221916

    image-20230409193532537

    將 Default 的標簽改掉:

    image-20230409193749286

    image-20230409193804479

  3. 指定變數的下限

    image-20230409193927878

  4. 繼續設定變數

    image-20230409194324305

    image-20230409194803056

4.4 藍圖注釋

  1. 選中想要添加注釋的部分

    image-20230409225447844

  2. 按 C 鍵

    image-20230409225538557

4.5 藍圖函式的純凈與非純凈

純凈函式:綠色結點,不改變游戲的狀態,如:單純的計算某個東西的值

image-20230412183809181

非純凈函式:藍色結點,改變游戲的狀態

image-20230412183819598

  1. 收縮純凈函式:

    image-20230412184110412

    image-20230412184231289

    image-20230412184315607

  2. 將宏改造為純凈宏:

    將投射改為純凈投射:

    image-20230412184555873

    洗掉輸入和輸出結點的執行線:

    image-20230412184715337

    全域查找使用該宏的地方,修改連線

5. 追光燈

5.1 創建追光燈

  1. 創建藍圖類:BP_SpotlightFollow

  2. 添加碰撞盒子組件

    image-20230409230157363

  3. 在橋的水晶處添加追光燈,設定碰撞盒子的大小

    image-20230410113433069

    image-20230410113445336

  4. 調整 SpotLight 的引數

    image-20230410113846325

  5. 將本實體的變動覆寫到藍圖類中

    image-20230410114220278

5.2 使追光燈持續照亮主角

Interp To 函式:插值,在兩個數之間補充一些數,讓過渡變得更自然

常見的插值函式:

image-20230411174120972

  • FInterp To、FInterp To Constant:浮點數(Float)插值,F:Float,浮點數

  • RInterp To、RInterp To Constant:角度(Rotation)插值,

    RInterp To | Unreal Engine Documentation

    image-20230411174321192

    輸入引數

    引數
    CurrentRotator Actual rotation
    TargetRotator Target rotation
    Delta TimeFloat Time since last tick
    Interp SpeedFloat Interpolation speed, if the speed given is 0, then jump to the target.
    InterpSpeed = 1 / Time = 2 Time = 0.5

    輸出值

    Return ValueRotator New interpolated position
  • Vector To、Vector To Constant:向量插值

? 帶有 “Constant” 的,表示勻速插值(線性插值);沒帶有 Constant 的,表示緩沖插值(非線性插值),到達終點值的時候放慢,有一個更平滑的緩沖,給人的感覺更柔和一些,

Find Look at Rotation:找到目標物件相對于當前物件的旋轉角度

  1. 記錄玩家的觸發狀態:

    image-20230411175633215

  2. 每幀設定聚光燈的朝向

    image-20230411175722092

  3. 獲得聚光燈朝向的目標旋轉角度:

    image-20230411181149092

  4. 整體結點連接如下:

    image-20230412120533687

6. 過關區域

6.1 創建過關區域

  1. 在編輯模式下選中地板的側面,往后縮 500

    image-20230411181758681

    image-20230411181842501

  2. 利用擠出功能拉回原來的長度

    image-20230411181938859

  3. 將拉出的面抬高做成一個臺子

    image-20230411182142918材質賦值:

    image-20230411183252323

  4. 添加一個管道

    image-20230411185048777

  5. 調整管道靠在臺子上

    image-20230411185323060

  6. 選擇所有面附加材質

    image-20230411185516771

  7. 調整天光和平行光

    image-20230411190120975

6.2 設計勝利觸發器

UE4 中GameInstance、GameMode、GameState、PlayerState和PlayerController的關系

名稱 生命周期 存在的位置(服務器或客戶端) 服務端和客戶端是否能同步 使用方式
GameInstance 引擎啟動時創建,引擎關閉后銷毀或更換 都存在 不能,服務器和客戶端時獨立的,彼此不通信 在多關卡中來回切換,需要一個公共的變數來進行記錄所需要的資料,進行資料互動,GameInstance類就充當這個全域類來記錄全域資料,
可以用來保存特定型別的持久資料,如用戶賬戶資訊
GameMode 關卡加載時生成,銷毀時一起銷毀 僅在服務器 無此說法 存盤客戶端不需要明確知道的游戲資訊,如出現的玩家和觀眾數量,以及允許的玩家和觀眾最大數量,
玩家進入游戲的方式,可包含選擇生成地點和其他生成/重生成行為的規則,
游戲是否可以暫停,以及如何處理游戲暫停,
游戲是否可以暫停,以及如何處理游戲暫停,
關卡之間的過渡,包括游戲是否以影片模式開場,
GameState 關卡加載時生成,銷毀時一起銷毀 都存在 可以,服務器可以在GameState上使用復制變數讓所有客戶端保持最新的游戲資料 與所有玩家和旁觀者有關、而不是與任何一個特定玩家有關的資訊,如
游戲已運行的時間(包括本地玩家加入前的運行時間),
每個個體玩家加入游戲的時間和玩家的當前狀態,
PlayerState 關卡加載時生成,銷毀時一起銷毀 都存在 可以,服務器可以在GameState上使用復制變數讓所有客戶端保持最新的游戲資料 與一個特定玩家有關的資訊,如玩家的分數
PlayerController 關卡加載時生成,銷毀時一起銷毀 服務器上每個玩家都有PlayerController,但本地客戶端只有本地玩家的PlayerController 客戶端和服務器之間傳達資訊,而不必將該資訊復制到其他客戶端
  1. 創建藍圖類 BP_Wintrigger

  2. 添加碰撞盒子

    image-20230412100236247

  3. 將該藍圖類的實體拖入場景中,縮放其大小

    image-20230412095842787

6.3 儲存水晶總數

  1. 創建 BP_GameInstance ,可以儲存一些全域變數

    image-20230412102512322

  2. 獲得 BP_GameInstance

    獲得 GameInstance (父類),將其投射為 BP_GameInstance

    image-20230412104022550

    將此操作封裝為宏:

    image-20230412104328113

  3. 保存水晶總數:

    image-20230412105801177

6.4 設計水晶自增并撰寫勝利條件

  1. 水晶自增函式:

    image-20230412105529438

  2. 添加水晶自增的邏輯:當水晶被玩家觸碰時,實作影片效果后使水晶數量+1,之后被銷毀

    image-20230412105849002

  3. 撰寫勝利條件:

    image-20230412122112133

  4. Project Settings -> Maps & Modes -> Game Instance -> BP_GameInstance

    image-20230412110653949

7. 用戶界面(UI)

7.1 創建 UI

  1. 創建 UI:User Interface -> Widget Blueprint

    image-20230412170435237

  2. 設計 UI 界面:

    image-20230412172101744

  3. 在 BP_Player 中創建并顯示界面

    image-20230412171624506

7.2 顯示關卡名和水晶

  1. 當 UI 被創建后,獲得當前的關卡名,保存在變數中

    image-20230412172639951

  2. 系結變數

    image-20230412172557689

  3. 新建系結函式:

    image-20230412172933982

    image-20230412173315074

  4. 獲得收集的水晶和總的水晶數量

    注意:在 UI 函式中不能呼叫宏庫中的宏

    image-20230412174013111

    可以將其封裝為本地的宏:

    image-20230412180620658

7.3 顯示所用時間與跨關卡計時

  1. 在 BP_GameInstance 中添加變數:GameTime

    image-20230412181004038

  2. 在進入關卡繪制 UI 界面后,獲得全域的累加游戲時間,將累加的游戲時間作為顯示的 LevelTime

    image-20230412181229482

  3. 累加加上每幀的時間

    image-20230412181431253

  4. 為 UI 中的顯示時間創建系結的函式,將 LevelTime 從浮點型轉換為 TEXT 型顯示出來

    image-20230412181818154

  5. 在 BP_WinTrigger 中獲取 UI 中計算的時間值,將總的時間值賦給 BP_GameInstance.GameTime

    image-20230412183409056

    將此段邏輯收縮為函式:

    image-20230412183444249

    image-20230412183531169

7.4 游戲勝利后的處理

7.4.1 添加獲勝后的提示

  1. 在 BP_UI 中拖入勝利提示框,將 Visibility 處選為 Hidden 即可在游戲運行中隱藏該字樣

    image-20230413105811354

  2. 在 BP_GameInstance 中添加變數 IsWin 記錄游戲狀態

    image-20230413105950283

  3. 在 BP_Wintrigger 中設定游戲獲勝狀態

    image-20230413110211939

  4. 在 BP_UI 中為 "You Win!" 創建系結函式

    image-20230413110634961

7.4.2 獲勝后停止計時并取消對小球的控制

  1. 在 BP_UI 中撰寫邏輯:游戲獲勝時停止游戲計時,并取消玩家的物理效果

    image-20230413111616102

  2. 在 BP_Player 中添加邏輯,玩家獲勝后將不能再進行移動

    image-20230413112034203

7.5 顯示未收集完時的 UI 閃動效果

  1. 在 BP_UI 中繪制文字框

    image-20230413112719826

  2. 設定 Visibility

    image-20230413112844124

  3. 添加影片

    image-20230413112921404

  4. 添加軌道

    image-20230413113009783

  5. 添加操作

    image-20230413113048741

    image-20230413113111654

  6. 拖動右側的滑動條設定每隔 0.25 秒變換一次 Visibility

    image-20230413113405345

  7. 在 BP_UI 中創建函式播放影片

    image-20230413114145817

  8. 在 WinTrigger 中呼叫該函式

    image-20230413114250955

  9. 在關卡剛開始時,重置每個關卡的手機水晶數

    image-20230413114550226

8. 創建關卡 2 并進行設計

8.1 創建與設計

  1. 若要在關卡 1 的基礎上進行改動,選擇 File -> Save Current As...

    image-20230412185651564

  2. 保存即可

    image-20230412185734844

  3. 設計關卡 2

    image-20230412195317025

8.2 關卡藍圖

關卡藍圖:每個關卡有且僅有一個

  1. 打開關卡藍圖

    image-20230412195604412

  2. 改變關卡 2 的相機視角:

    1)在 BP_Player 中添加一個函式 AdjustCamera

    image-20230412200249748

    2)在關卡 2 的藍圖中呼叫 BP_Player.AdjustCamera 調整懸臂的長度

    image-20230412200519072

    3)調整后視角如下

    image-20230412200640327

8.3 關卡切換

  1. 在勝利觸發器中創建變數 LevelNames 儲存

    image-20230412200955718

  2. 陣列賦值:注意編譯后才能進行賦值

    image-20230412201512031

  3. 獲取當前關卡的索引并與最后一個關卡的索引進行比較:

    image-20230412201940017

    收縮為純函式:

    image-20230412202259602

    收縮為純函式之后沒有多余針腳,所以需要進行設定:

    image-20230412202419313

    將其中用來查找當前關卡索引的邏輯收縮為函式:

    image-20230412202811505

    image-20230412203325608

    image-20230412202859047

    將 GetLevelIndex 設為純函式:

    image-20230412203428959

  4. 撰寫邏輯:加載下一個關卡

    image-20230413104754184

    如果不是最后一關,則自動加載下一個關卡

    image-20230413105052452

9. 游戲音效

  1. 創建檔案夾:

    image-20230413115709513

  2. 將音頻檔案匯入

    image-20230413115802824

  3. 按 Ctrl + Shift + s 或者點擊 Save All 保存

    image-20230413115900687

  4. 設定背景音樂:

    1)直接雙擊點開 Cave1 和 Cave2 進行設定:勾選 Looping 回圈播放

    image-20230413120114531

    2)在關卡藍圖中設定播放背景音樂:

    image-20230413120339033

    image-20230413120517240

  5. 音效設定:創建 Cue

    image-20230413120638254

    1)創建聲音衰減模板

    image-20230413121205562

    2)使 Collection_Cue 和 Fire_Cue 使用剛剛創建的聲音衰減模板

    3)設定聲音衰減模板

    image-20230413121548112

  6. 設定播放聲音:

    1)水晶:粒子特效

    image-20230413122545305

    2)加農炮:開火

    image-20230413122135106

10. 游戲發布

  1. File -> Package Project

    image-20230413122902955

  2. 發布的配置:

    • Development :開發者模式發布
    • Shipping:直接發布

    image-20230413123047402

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/550017.html

標籤:其他

上一篇:三分鐘完成靜態網站托管

下一篇:Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增強?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more