UE 3.UE官方藍圖教程

1.Introduction to Blueprints

打開方式:There is a Palette panel that can be opened by going to Window > Palette in the Blueprint Editor.

The Palette panel contains a list of all nodes that can be used in Blueprints.

At the top of the panel there is a Favorites section that shows the favorite and most frequently used nodes. To set a node as a favorite, right-click on it in the Palette panel and choose “Add to Favorites”.

藍圖節點的執行從紅色事件節點開始, 然後從左到右跟隨白線, 直到到達最後一個節點。之後, 它將轉到另一個已觸發的藍圖事件。

The execution of the nodes of a Blueprint starts with a red Event node and follows the white wire from left to right until it reaches the last node. After that, it moves on to another Blueprint event that has been triggered.

節點的白色引腳稱爲執行引腳。其他彩色引腳是數據引腳。

The white pins of nodes are called execution pins. The other colored pins are the data pins.

下圖中,在觸發 "BeginPlay" 事件時,值分配給Energy and Lives的變量。

有一些節點根據條件控制藍圖執行路徑。(邏輯控制)例如分支節點Branch

There are some nodes that control the flow of execution of the Blueprint. These nodes determine the execution path based on conditions.

For example, the image on the right shows a Branch node that is using as a condition the value of the Boolean variable Is Big Health Pack.

Data wires:當具有數據引腳的節點運行時, 它在完成執行之前使用數據線獲取所需的數據。

在下圖中, 執行從BeginPlay事件開始。Set 節點爲 Energy 變量分配一個新值, 但必須使用連接到乘法節點的數據線獲取此值, 該數據線需要使用另一個數據線獲取播放機級別變量的值。

2. Basic Blueprint Programming Concepts

簡介:

創建變量並修改其屬性

顯示如何使用算術、關係和邏輯運算符

顯示函數、自定義事件、宏及其差異

介紹程序流程

變量

變量類型:

字符串/文本: 用於存儲文本。文本變量更可取, 因爲它支持本地化。

向量: 包含浮點值 XY Z

轉換: 用於存儲位置、旋轉和縮放。

String / Text: Used to store text. The Text variable is preferable since it supports localization.

Vector: Contains the float values X, Y, and Z.

Transform: Used to store location, rotation, and scale.

細節面板:

選擇變量後, "詳細信息" 面板可以對變量的名稱和類型進行更改。

屬性包括:

實例可編輯Instance Editable: 如果選中, 則可以在 "級別" 中的實例中更改變量。

"藍圖只讀" Blueprint Read Only: 如果選中, 藍圖節點將無法更改該變量。

工具提示Tooltip: 包含光標懸停在變量上時顯示的信息。

Spawning 上公開Expose on Spawn: 如果選中, 可以在生成藍圖時設置變量。

Array, set, and map:屬性包括一個按鈕, 用於將變量轉換爲容器container。容器可以存儲同一類型的多個元素。

Get/Set:

當一個變量被拖放到事件圖中時, 將出現一個菜單, 其中包含 "獲取" "設置" 選項。

快捷方式:若要創建 Get 節點, 請在拖放變量時按 Ctrl 鍵。使用 Alt 鍵創建 "設置" 節點。

Operators:

Arithmetic operators算術運算符

"+" 運算符接收左側的兩個輸入值, 並在右側引腳給出操作結果。要使用兩個以上的輸入值, 只需單擊 "添加引腳" 選項。

輸入值可以直接輸入到節點中(常量), 也可以從變量中獲取。

Relational operators關係運算符

執行兩個值之間的比較, 並返回一個布爾值 ("true" "false") 作爲比較的結果。

下圖顯示了關係運算符和使用分支節點的示例。

logical operators邏輯運算符:

邏輯運算符在布爾值之間執行操作, 並返回布爾值 ("true" "false") 作爲操作的結果。主要邏輯運算符如下所示:OR/AND/NOT

Functions, events, and macros函數、事件和宏:

Functions

函數允許在藍圖的各個部分中執行的一組操作, 以便於組織和維護腳本。

可以從其他藍圖調用函數, 並允許使用輸入和輸出參數。

若要創建函數, 請轉到 "藍圖編輯器" 中的 "我的藍圖" 面板, 然後單擊 "函數" 標籤中的 "+" 符號。

Functions: Inputs and outputs

若要添加輸入或輸出參數, 請在 "我的藍圖" 面板中選擇該函數, 然後使用 "詳細信息" 面板。

Functions:local variables

函數允許使用僅在函數內可見的局部變量。

若要創建局部變量, 請雙擊某個函數對其進行編輯, 然後查看 "我的藍圖" 面板。在面板的底部, 您將找到一個名爲 "本地變量" 的類別, 該類別的名稱在括號中。單擊 "本地變量" 類別中的 "+" 按鈕。

Functions:The Target parameter

Target 參數是多個函數的通用參數, 指示將使用函數調用修改的對象。

默認值爲 "self", 它是對擁有正在執行的腳本的 Actor Object 實例的特殊引用

下圖顯示了使用DestroyActor函數的 Target參數的不同方式。

Custom events

虛幻引擎提供了許多預定義的事件, 但可以創建新的事件在藍圖中使用。這些事件可以從它們當前藍圖和其他藍圖中調用。

若要創建自定義事件, 請在 "事件圖" 中右鍵單擊, 展開 "添加事件" Add Event類別, 然後選擇 "添加自定義事件..." Add Custom Event

Custom events:input parameters

通過選擇 "自定義事件" 節點, 可以管理事件名稱和輸入參數。事件沒有輸出參數。

下顯示一個名爲 "WelcomeMessage" 的自定義事件, 其中包含一個名爲 "Name" 的輸入參數。

該事件將使用參數name在屏幕上創建和打印自定義消息。

Custom events:delegates

事件的右上角有一個紅色的小正方形, 稱爲委託。這是對事件的引用。某些操作接收事件參數, 使用委託可以實現。

下圖中自定義事件"Clock"的委託連接到 Set Timer by Event輸入引腳, 因此時鐘事件將每秒調用一次。

This is just a reference to the event. Some actions receive an event as a parameter, and using the delegate makes that possible.

In the image, the delegate of the custom event named “Clock” is wired to the Set Timer by Event node’s Event input pin, so the Clock event will be called every second.

Macros宏:

在一個公共位置聚集操作的另一種方法是使用宏。宏類似於節點的摺疊圖。在編譯時, 宏的操作將在正在使用該宏的位置展開。

宏可以有輸入和輸出參數, 以及多個輸入和輸出執行引腳。

比較:

宏、自定義事件和函數提供了組織腳本的不同方法。共同點:他們都有輸入參數。

宏具有輸出參數, 並且可以有多個執行路徑。它們不能從另一個藍圖中調用。

事件沒有輸出參數。它們可以從其他藍圖中調用, 並具有 "委託" 引用。它們支持時間線。

可以從其他藍圖調用函數, 並具有輸出參數。函數不支持隱藏操作latent actions, 如延遲操作。

Program flow

Branch node:

分支Branch節點根據布爾輸入 "條件" 的值 ("" "") 來指導藍圖的執行流程。

For Loop node:

ForLoop節點爲每個索引執行與輸出引腳循環體關聯的一組操作。

ForLoop 節點完成其執行時, 將觸發輸出引腳完成。

Sequence node序列節點

序列節點可用於幫助組織其他藍圖操作。觸發時, 它按順序執行連接到輸出引腳的所有節點,

可以使用 "添加引腳 +" 選項添加輸出引腳。若要刪除引腳, 請右鍵單擊引腳, 然後選擇 "刪除執行引腳" 選項

3.Building and Using Actor Classes

簡介:

顯示如何將組件添加到藍圖引入構造腳本

展示各種類型的事件

演示如何生成、銷燬和引用參與者實例

顯示如何執行輸入映射

Components

組件是可在藍圖中使用的現成類。藍圖中使用組件則可以包含多個功能。

若要將組件添加到藍圖, 請使用藍圖編輯器中的 "組件" 面板。

右側的圖像顯示新藍圖的 "組件" 面板, 其中包含按下 "添加組件" 按鈕時顯示的一些組件選項。

Components: viewport

可以在視口中看到組件的可視化形式。

下圖顯示了第三人模板Third Person template中的 "第三角色" ThirdPersonCharacter 藍圖中的組件。名稱旁邊有 "(繼承)" 的組件是從 "角色" 類繼承的。

CapsuleComponent 用於碰撞測試。

網格組件是在視覺上表示角色的骨骼網格。

"後相機FollowCamera" 組件是將用於查看遊戲的相機。

"CharacterMovement" 組件包含用於定義移動的各種屬性。

Construction Script構造腳本

構造腳本是一個特殊功能, 當藍圖首次添加到Level , 當其屬性發生更改時, 或者在運行時生成類時, 所有參與者藍圖都將執行該函數。構造腳本有一個單獨的圖形, 可以在其中放置要執行的操作。

需要注意的是, 當遊戲開始時, 構造腳本不會在放置的Actors身上運行。

Construction Script: example

右側顯示的構造腳本使用 "設置材質" 功能, 根據在可編輯可變材料類型中選擇的材質定義靜態網格組件的材質類型。

每當修改 "材質類型" 變量時, 構造腳本將再次運行, 並使用新材質更新對象。

Events

Begin play event

事件允許虛幻引擎和參與者之間的通信。一個常見的示例是 " Begin play " 事件。

Actors的遊戲開始時, 將觸發 " Begin play " 事件。如果Actors是在遊戲中間生成的, 則生成時會立即觸發此事件。

tick event

"Tick" 事件, 稱爲遊戲的每一幀。例如, 在以每秒60幀的速度運行的遊戲中, Tick 事件在一秒鐘內調用60次。

Tick 事件具有" Delta Seconds " 的參數, 其中包含自最後一幀以來經過的時間量。

在右側所示的 Tick 事件中, Actor以每秒100釐米的速度沿 X 軸移動。

僅在必要時使用 Tick 事件, 因爲它可能會影響性能。

Collision events

當兩個參與者碰撞或重疊時, 將觸發碰撞事件。

當兩個參與者開始重疊, 並且兩個參與者的 "生成重疊事件Generate Overlap Events " 屬性設置爲 "true" , 將執行Event ActorBeginOverlap

當兩個參與者停止重疊時, 將執行Event ActorEndOverlap重疊。

如果碰撞中的其中一個參與者的模擬生成命中事件Simulation Generates Hit Events屬性設置爲 "true", 則將執行Event Hit

Mouse Interaction

有一些與Actor和鼠標交互相關的事件。

當鼠標光標在演員身上移動時, 將調用Event ActorBeginCursorOver

當鼠標光標移出演員時, 將調用Event ActorEndCursorOver

當鼠標單擊演員時, 將調用Event ActorOnClicked

當釋放鼠標按鈕且鼠標光標仍在 "參與者" 上方時, 將調用Event ActorOnReleased

Actor Instances

Spawning actors

Spawn Actor from Class是使用指定的類和transform創建 Actor 實例的函數。

Collision Handling Override輸入定義瞭如何在創建時處理碰撞。輸出參數 "返回值" 是對新創建的實例的引用。

在右側的示例中, 當按下空格鍵時, 將在當前藍圖的同一位置 (transform) 創建 Blueprint Effect Explosion類的實例。

Destroying actors

DestroyActor函數在運行時從Level中刪除Actor實例。必須在Target參數中指定要刪除的實例。

右側的圖像顯示一個名爲 "測試運行狀況" 的函數, 該函數將檢查運行狀況變量的值是否小於零。如果 "true", 則此藍圖的當前實例 ( "self") 表示 ", 將被銷燬。

Get all actors of class

Get All Actors Of Class是一個函數, 它獲取當前Level中屬於指定類的所有參與者的引用。

Actor Class參數指定搜索的類。

Out Actors輸出參數是一個數組, 其中包含對在Level中找到的指定類的 "參與者" 實例的引用。

在右側的圖像中, Get All Actors Of Class返回一個 BP_Coin Actors數組, 然後使用 ForEachLoop 節點將數組中每個Actors在遊戲中的 "設置參與者隱藏Set Actor Hidden In Game " 功能中的 "新建隱藏New Hidden " 屬性設置爲 "true"

這是開銷很大的操作。不要在幀事件中使用它。

Referencing actors

在藍圖中, 可以創建引用對象Object / Actor的變量。

下圖顯示了引用Blueprint_Chair類實例的變量創建。對象引用指向 Level 中的Actor

創建時, 變量爲空。給變量設置實例的一種方法是檢查 Instance Editable屬性, 將此藍圖添加到 Level, 然後在 "詳細信息" 面板中選擇Level中的Actor設置。

另一種方法是使用Spawn Actor from Class的返回值。

Player Input

Input Mappings

可以創建新的輸入事件, 表示在遊戲中有意義的操作。

例如, 與其爲鼠標左鍵創建觸發開槍的輸入事件, 不如創建一個名爲 "Fire" 的操作事件, 並映射可觸發此事件的所有鍵和按鈕。

若要獲得輸入映射input mappings, 請在 "級別編輯器Level Editor " 菜單中, 轉到 "編輯" > "項目設置..." Edit > Project Settings, 然後在 "引擎Engine" 類別中選擇 "輸入" 選項。

Action mappings

操作映射用於按鍵和按鈕。

右側的圖像顯示了來自 "第一人稱" 模板的操作映射的示例。

在此示例中, 創建了一個名爲 "跳轉" 的操作, 該操作可由空格鍵、遊戲板的底按鈕或運動控制器的左觸發器觸發。

axis mappings

軸映射Axis mappings允許具有連續範圍的輸入, 例如鼠標的移動或遊戲板的模擬棒。

鍵盤和按鈕也可以在軸映射中使用。下例中, MoveRight 操作映射到 "D" , Scale

屬性的值設置爲 "1.0", 並映射到 "A" , 其值設置爲 "–1.0", 表示相反的方向。

input action events

所有操作映射action mappings都可在context菜單中的 "輸入 > 操作事件Input > Action Events " 下的 "藍圖編輯器" 中找到的。

按下或釋放與之關聯的鍵盤或按鈕時, 將生成 "輸入操作InputAction" 事件。

下圖是 InputAction 事件的示例。

input axis events

所有axis mappings都可在context菜單中 "輸入 > 軸事件Input > Axis Events " 下的 "藍圖編輯器" 中使用。

" InputAxis " 事件持續報告軸的當前值。

下圖是 InputAxis 事件的示例。

本節介紹了組件和構造腳本, 並演示瞭如何將各種類型的事件添加到藍圖中。

它還解釋瞭如何管理 Actor 實例以及如何執行輸入映射

4. Gameplay Framework Classes

識別遊戲框架Gameplay Framework

顯示遊戲模式Game Mode類及其默認類

解釋玩家控制器Player Controller玩家狀態Player State

顯示Pawn類和一些子類

介紹遊戲實例Game Instance遊戲會話Game Session

公共類Common Classes

創建藍圖時, 您將看到一個通常用作藍圖父類的類的列表。這些公共類是遊戲框架的一部分, 用於表示玩家、角色、控制器和遊戲規則。

右側的圖像顯示公共類的層次結構。箭頭指示右側的類正在從左側的類繼承。虛幻中有一個稱爲 Object 類的基類。

Game Mode

Game Mode類用於定義遊戲規則。遊戲模式還指定將用於創建Pawn, Player Controller, Game State, HUD 和其他類的默認類, 如下圖像所示。

每個Level可以有不同的遊戲模式。如果未爲 Level指定 Game Mode, 它將使用爲項目設置的 "遊戲模式"

在多人遊戲中, Game Mode僅存在於服務器上, 不會複製到客戶端。

Assigning a Game Mode

若要指定項目的默認遊戲模式, 請去Edit > Project Settings...。在 Level EditorProject類別中, 選擇 Maps & Modes  選項。在 Default GameMode  屬性的下拉列表中選擇 "遊戲模式", 如下圖。

若要指定Level的遊戲模式, 請單擊  Level Editor中的 Settings按鈕, 然後選擇 World Settings選項。在GameMode Override屬性的下拉列表中選擇 "遊戲模式", 如下圖所示。

級別的 "遊戲模式" 將覆蓋項目的默認遊戲模式。

Game state

Game State類用於跟蹤表示遊戲當前狀態的變量, 並在多人遊戲中與所有客戶端共享。

基本的想法是, Game Mode定義服務器上的規則, Game State管理遊戲中那些變化的信息, , 需要發送到客戶端。

若要使用基於Game State類的新藍圖, 必須將自定義Game State類分配給Game ModeGame State Class參數。

遊戲狀態類擴展了遊戲狀態基類, 並添加了一些多人遊戲功能。

Player Controller

控制器類有兩個主要子類。Player Controller類由人的玩家使用, AI Controller類使用人工智能來控制Pawn

Pawn Character類只有在被Player Controller擁有時纔會接收輸入事件。

被玩家控制器所擁有的Pawn類可以在遊戲中更改。下圖來自一個Level藍圖, 顯示了 Possess函數的使用。在本例中, 當按 Enter 鍵時, Player Controller將擁有Pawn Actor in the Level

Player state

玩家狀態類用於跟蹤需要在多人遊戲中與其他客戶端共享的特定玩家的信息。

Player Controller僅存在於客戶端上, Player State則從服務器複製到所有客戶端。

若要使用基於玩家狀態類的新藍圖, 必須在Game ModePlayer State Class 參數中對其進行設置。

Pawn

Pawns是可以由Controllers (玩家或 AI) 控制 (擁有) Actors

Pawn類表示物理主體, Controller類表示大腦。

下圖是從 Pawn 類繼承的一些參數。Pawn類可以使用擁有它的Controllerrotation值。

其他屬性指示控制器如何擁有Pawns

Pawn: Character

Character類是 Pawn 類的一個子類, 用於表示可以行走、奔跑、跳躍、游泳和飛行的雙足角色。此類已經有一系列組件來幫助實現此目標。

下圖是Character類中存在的組件。

CapsuleComponent 用於碰撞測試。

ArrowComponent指示Character當前方向。

Mesh組件是在視覺上表示Character的骨骼網格。網格組件的動畫由動畫藍圖控制。

CharacterMovement 組件用於定義各種類型的角色運動, 如行走、跑步、跳躍、游泳和飛行。

Character movement

CharacterMovement組件是用 C++ 編寫的, 可處理多人遊戲中的移動以及複製和預測。

對於各種類型的運動, 有很多屬性可以在組件上進行調整。

Pawn: Vehicle

輪式車輛Wheeled Vehicle類是 Pawn 類的子類的另一個示例。

它包含一個以 C++ 編寫的VehicleMovement組件, 並具有用於模擬車輛行爲的代碼。它有許多參數用於定義車輛的運動和物理。它還可以處理多人遊戲中的複製和預測。

下圖是VehicleMovement組件的某些屬性。

HUD

HUD 類用於創建heads-up display (HUD), 這是一種屏幕顯示, 可快速訪問重要信息。HUD 在遊戲中用於向玩家顯示各種信息, 如他們的分數、時間、能量等。

在虛幻引擎中, HUD 類是一個基類, 其中包含一個畫布, 它是一個可以繪製圖基元primitives (如文本和紋理) 的對象。

HUD 類包含一個名爲 "Receive Draw HUD" 的事件, 用於繪製每個幀的基元。

HUD 類只存在於每個客戶端上, 不會複製。

Game instance

Game Instance類的實例在遊戲開始時創建, 並且僅在遊戲關閉時才被刪除。

每次加載Level, Level中的所有Actors和其他對象都將被完全銷燬並重新計時。

Game Instance類及其包含的數據在Levels之間保持不變。

Game Instance僅存在於每個客戶端上, 不會複製。

若要分配要在遊戲中使用的Game Instance, 請通過 "編輯 >項目設置 > 地圖和模式 Edit > Project Settings > Maps & Modes."來修改項目的設置。

Game session

簡單地說, Game Session是在服務器上運行的遊戲的界面, 客戶端可以使用它來發現和加入遊戲。

下一些可用於管理會話session的藍圖函數。

5.Simple Game Example

簡介:

實現一個簡單的遊戲

展示如何使用Game Mode類定義遊戲規則

提供如何使用宏、自定義事件和函數的示例

演示計時器在遊戲中的使用

Game classes

創建的遊戲基於第三人模板。遊戲使用四個主要的藍圖類:

ThirdPersonCharacter: 一個表示玩家的Pawn子類, 是第三人模板的一部分。此類分配給Game ModeDefault Pawn Class參數。

BP_Statue: 代表雕像的Actor類。它檢查與玩家的碰撞, 並有定期改變位置的邏輯。

BP_Guide_GameMode: 控制遊戲的狀態並存儲一些變量, 如時間、分數和級別。它還定義基類, ThirdPersonCharacter

BP _ GUIDE _ HUD: 負責在屏幕上繪製時間、分數和Player Level值。

遊戲規則Game rules

玩家必須在時間用完之前收集屏幕上出現的小雕像。

初始時間設置爲30秒。

比賽在沒有時間的時候結束。

每收集5個雕像, 玩家級別將增加, 時間將增加15秒。

玩家從玩家級別1開始, 玩家可以達到的最大級別是玩家級別5

方案中有三個定期更改位置的圖態。

當雕像出現在一個位置時, 它將在那裏停留一段時間, 這取決於當前的玩家級別。雕像改變位置所需的秒數是表達式 "6–級別" 的結果。

當玩家得到一個雕像, 另一個生成。

收集到的雕像的分數由 "10 x " 的表達式確定。

時間、分數和Player Level值將在屏幕上繪製。

Creating the project

使用帶有起始內容的第三人模板創建新項目。

刪除場景中間的Static MeshText Render Actors, 只留下地板和側壁, 如圖所示。

在內容瀏覽器中, 創建一個名爲 "BP _ Guide" 的新文件夾, 該文件夾將存儲所有新的藍圖。

BP_Guide_gamemode

創建新的藍圖類, 並選擇 Game Mode Base 作爲父類。將其重命名爲 BP_Guide_GameMode

創建以下整數變量:

Level: 在遊戲中存儲當前Player Level

Score: 存儲玩家的分數。

StatueCount: 跟蹤收集到的雕像數量。

Time 存儲遊戲結束前的剩餘時間。

創建以下布爾變量:

GameOver: 指示遊戲是否已結束。

BP_Guide_gamemode: Start Game Macro

"我的藍圖" 面板中, 創建一個名爲 "StartGame" 的宏。

此宏負責初始化控制遊戲狀態的變量。

StartGame 宏的 Details面板中, 創建一個名爲 "In" 的輸入參數, 並將類型設置爲 "Exec"。創建一個名爲 "Out" 的輸出參數, 並將類型設置爲 "Exec"

宏將設置變量的初始值。

Set Timer 函數創建一個 Timer 對象, 該對象將每1.0秒調用一次名爲 "Clock" 的自定義事件。

BP_Guide_gamemode: using the Macro

BP_Guide_GameMode藍圖中, BeginPlay事件中調用 Startgame 宏。

創建一個名爲 "RestartGame" 的自定義事件, 該事件也稱爲 StartGame 宏。

當玩家按 enter 鍵時, ThirdPersonCharacter藍圖中調用 RestartGame 自定義事件, 如下圖

BP_Guide_gamemode: clock event

Clock是計時器每秒調用的自定義事件。它的職責如下:

將時間變量的值減少 "1"

檢查 Time 變量的值是否爲 "0";如果爲 "true", 則執行以下操作:

將布爾GameOver變量的值設置爲 "true"

清除計時器, 使其停止調用 Clock 事件

BP_Guide_gamemode: Statue Collected

"Statue Collected雕像收集" BP_Guide_GameMode中的一個函數, 當玩家獲得雕像時, 它被 BP_Statue類調用。

函數的第一部分執行以下操作:

·將玩家收集雕像時獲得的積分添加到Score變量的值中,計算方式爲 "10 x 級別"

·將值 "1" 添加到StatueCount變量中, 該變量存儲收集的雕像數量。

"收集的雕像" 函數的第二部分執行以下操作:

測試 StatueCount 變量的值是否爲5的倍數。如果爲 "true", 則執行以下操作:

將值 "15" 添加到 Time 變量。

將值 "1" 添加到級別變量, 級別變量的最大值限制爲 "5"

這意味着, 每收集五個雕像, 玩家推進一個級別, 並獲得額外的15秒的時間。

模量 (%)運算符返回除法的餘數。

BP_Guide_HUD

創建新的藍圖類, 並選擇 "HUD" 作爲父類。將其命名爲 "BP _ Guide _ HUD"

創建一個名爲 "My_Guide_GameMode" 的變量, 其類型爲 "BP_Guide_GameMode Object Reference "

下圖展示BeginPlay事件獲取對遊戲模式的引用, 轉換成BP_Guide_GameMode的引用, 並將該引用保存在變量中。

此引用將用於訪問將在屏幕上繪製的變量。

BP_Guide_HUD: screen coordinates

在這個遊戲中, 將用於繪製的唯一操作是Draw Text函數。此函數接收一些輸入值, 其中包括兩個參數Screen X” and “Screen Y的輸入值, 這兩個參數取決於屏幕的分辨率。例如, 1280 x 720 是一種常見的分辨率。

這些值表示將在其上繪製文本的屏幕的座標。屏幕的左上角位置是原點, 其中屏幕 X 和屏幕 Y 的值爲 "0"。下圖顯示了這兩個參數的值如何決定文本的繪製位置。

Score, Time, and Level變量使用的Screen Y值爲 "10", 因此關聯的文本將顯示在屏幕頂部。

使用的Screen X值是 "10" Score變量, "300" Time變量, "550" Level變量。

BP_Guide_HUD:receive draw hud

若要在屏幕上繪製, 必須將Receive Draw HUD事件添加到 "事件圖表" 中。此事件僅在基於 HUD 類的藍圖中可用。

HUD 類的Draw Text函數用於在屏幕上打印分數, 如圖所示。

函數用於生成一個字符串, 其中包含文本 "Score:" +分數變量的當前值。生成的字符串將傳遞給Draw Text函數的Text參數。

"時間" "級別" 變量繪製文本的設置與 "分數" 變量的繪圖文本的設置非常相似。

"繪製文本" 函數中的唯一更改涉及參數 "文本""文本顏色" "屏幕 X"

Receive Draw HUD事件測試的最後一部分。是否GameOver變量的值爲 "true",如果是, 則在屏幕上繪製字符串 "遊戲結束" " Enter"

BP_Statue

創建新的藍圖類, 並選擇 "演員" 作爲父類。將其重命名爲BP_Statue

添加Static Mesh組件。在 Static Mesh組件的 "詳細信息" 面板中, Static Mesh屬性設置爲SM_Statue"

Materials類別中的Element 0屬性設置爲M_Metal_Gold

"衝突預設Collision Presets " 屬性設置爲OverlapAllDynamic

編譯並保存藍圖類。

BP _ 雕像藍圖的三個實例添加到Level的任何位置。

BP_Statue:Event begin play

右側的圖像顯示了BeginPlay事件獲取對Game Mode的引用, 轉換爲對BP_Guide_GameMode的引用, 並將該引用保存在變量中。

之後, 調用函數InitStatue

BP_Statue:Function Init statue

InitStatue函數中, 有兩個主要節點:

Teleport: 此節點爲雕像設置新的位置。位置由一個向量 (XYZ) 表示, 其中 X Y 參數的值是隨機的。X Y 參數的最小值和最大值表示遊戲的區域。

Set Timer by Function Name: 此計時器表示雕像更改位置所需的時間 (以秒爲單位)。當這一次到期時, 將調用InitStatue函數來設置新的位置。Time 參數的值是表達式 "6–級別" 的結果。"級別" My_Guide_GameMode類中的一個變量, 表示Player Level

BP_Statue:Actor Begin Overlap

當遊戲中的演員與雕像重疊時, 就會觸發演員重疊碰撞事件。

傳遞給 "分支" 節點的條件輸入參數的值是表達式的結果, 該表達式檢查重疊雕像的演員是否爲玩家角色, 以及遊戲模式中的 "遊戲" 變量是否未設置爲 "true"。只有在這兩個條件都是正確的情況下, 纔會收集雕像。

如果收集雕像, 則調用My_Guide_GameMode類的 Statue Collected函數來管理玩家的分數和遊戲級別。

之後, 目前的雕像被摧毀, 並創造了一個新的雕像。

Setting the game mode

打開BP_Guide_GameMode, 然後單擊Class Defaults按鈕。將Default Pawn Class類屬性設置爲 "ThirdPersonCharacter", HUD 類屬性設置爲 "BP _ Guide _ HUD"

Level Editor, 單擊 "設置" 按鈕, 然後選擇 "世界設置"。在 "世界設置" 面板中, GameMode Override屬性設置爲 "BP_Guide_GameMode"

遊戲現在已經準備好了。

如果一切都正確, 在玩遊戲時, 玩家將控制一個角色, 必須得到雕像。

方案中有三個定期更改位置的圖態。

當玩家與雕像重疊時, 他們將獲得分數, 雕像將重新出現在另一個位置。

有倒計時, 沒有時間的時候比賽就結束了。

每收集5個雕像, 玩家級別將增加, 時間將增加15秒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章