1. 程式人生 > >虛幻4藍圖快速入門(二)

虛幻4藍圖快速入門(二)

藍圖使用者指南

由於藍圖就是個視覺化的腳本系統,那麼一個程式語言中的基本概念也就都存在。下面我們簡單來介紹下藍圖中的一些基本概念。

變數

概述

Variables(變數) 是存放一個值或引用世界中的一個Object或Actor的屬性。這些使用者介面 內部訪問,或者通過設定使得可以在外部進行訪問, 以便應用放置在關卡中的藍圖例項的設計人員可以修改它們的 值。

變數顯示為圓角方框,方框內包含了變數的名稱:

變數型別

您可以建立各種型別的變數,包括資料型別的變數(比如布林型、整型及浮點型)及用於存放類似於Object、Actor及特定類的引用型變數。 您還可以建立每種變數型別的陣列。每種變數型別都進行了顏色編碼,以方便識別。

藍圖陣列

和變數值一樣,藍圖也可以在陣列中儲存資料。如果您不熟悉程式設計術語,您可以把陣列想象成為存在於一個單元中的一組變數。

陣列僅能存放一種型別的值。比如,布林型陣列僅可以存放布林值。

陣列變數包含一個3x3 的帶顏色網格,表明它們是陣列,不是正常的變數。在沒有連線的陣列中,其網格的中心是黑的。一旦連線後,整個網格將會可見,如下所示。

陣列索引

同時需要注意的一點是,陣列中的值的索引值是 從0開始的 ,這意味著第一個索引是 0 而不是1。

流程控制

概述

Flow Control (流程控制)使得能在藍圖中清楚地控制執行的流程。 此種控制可以多種形式進行,基於某些值為真的情況來選擇圖表的某個分支來執行,多次執行某個特定分支,以特定順序執行多個分支,等等。 預設的流程控制操作包括了分支(if語句),迴圈(for和while語句),門,及序列。

開關節點

開關節點讀取資料輸入,並會基於該輸入值來從匹配的(或可選的預設)執行輸出中傳送執行流程。 可用的開關有以下幾種型別: Int (整型),String (字串型), Name (名稱型),以及 Enum (列舉型)。

一般而言,開關節點會根據其估算的資料型別擁有執行輸入以及資料輸入。 輸出均為執行輸出。 Enum 開關會自動從 Enum 屬性中生成輸出執行引腳,而 Int, String 及 Name 開關擁有可自定義的輸出執行引腳。

程式中的switch關鍵字,但是它支援更多的型別。

標準流程控制節點

這些節點提供了一系列方法來控制執行的流程

Branch

在面對單個 True/False 判定的情況下,Branch(分支)節點是一種建立基於判斷的流程的簡單方式。 在執行後,分支節點會查詢附加的布林變數的輸入值,並在合適的輸出節點下方來輸出執行脈衝值。其實就是if-else分支。

DoN

DoN節點將會 N 次觸發執行脈衝。 在達到限制後,它將會停止所有的輸出執行,直到脈衝被傳入其 Reset (重置)輸入。

例如,您可以啟動車輛20次,然後在繫結到 Reset (重置)輸入的加油事件被啟用前,無法再次啟動車輛。

DoOnce

DoOnce節點-正如名稱所顯示的-將會僅僅觸發執行脈衝一次。 在之後,它將會停止所有的輸出執行,直到脈衝被傳入其 Reset (重置)輸入。 該節點等同於DoN節點中 N = 1 的情況。

我們舉例來說,您可以對一扇開啟的門的節點網路設定DoOnce,這樣這扇門將僅僅開啟一次。 不過您可以繫結一個觸發事件到Reset(重置)輸入,這樣會導致在觸發器被啟用時,門會再次開啟。

FlipFlop

FlipFlop節點取入執行輸出並在兩個執行輸出間切換。 其第一次被呼叫時,將會輸出A。 第二次被呼叫時,將會輸出B,然後再是A,然後又是B,迴圈往復。 該節點同時有布林變數輸出,使您可以追溯輸出A何時被呼叫。

ForLoop

ForLoop節點的工作原理等同於標準的程式碼迴圈,將會在開始和結束之間的每個索引觸發執行脈衝。就是C++中的for迴圈視覺化版本。

ForLoopWithBreak

ForLoopWithBreak節點包含了能中斷迴圈的輸入引腳,除此之外,它執行的方式與ForLoop節點非常相似。

Gate

Gate(門)節點用來開啟和關閉執行流。 簡單來說,Enter輸入取入執行脈衝,同時門的當前狀態(開啟或關閉)將會決定這些脈衝是否從Exit輸出中傳出。

MultiGate

MultiGate取入單個數據脈衝並將其傳送到任意數量的潛在輸出。 這個過程隨機按順序發生,可能會迴圈

Sequence

Sequence (序列)節點使得單個執行脈衝能按順序觸發一系列事件。 節點可能有任意數量的輸出,所有的輸出引腳都會在序列節點一獲得輸入時就被呼叫。 它們將總是按順序被呼叫,但不會有任何延遲。 對一般使用者來說,輸出引腳看起來好像被同時觸發了一樣。

WhileLoop

只要特定值為 true ,則WhileLoop節點將會輸出一個結果。 在迴圈的每個迭代中,它會檢視其輸入布林值的當前狀態。 一旦它讀取到 false ,該迴圈中斷。

函式

Functions(函式) 是屬於特定 藍圖 的節點圖表,該節點圖表可以執行或者從 藍圖 中的另一個 圖表中進行呼叫。函式具有一個單一的入口點,由和該函式具有相同名稱的一個節點指定, 該節點包含了一個單一的執行輸出引腳。當從另一個圖表呼叫函式時,會啟用該輸出執行引腳, 促使執行連線網路。

訪問修飾符

當建立函式時,您可以指定可以訪問及不能訪問這些函式的其他物件。這可以通過設定 Access Specifier(訪問修飾符) 屬性來完成,該屬性可以在選中函式的 詳細資訊 面板中找到。跟C++中一樣,有Public Protected Private三種類型。

純函式和非純函式

函式可以是 純函式 也可以是 非純函式 。主要的區別是純函式不會以任何方式修改狀態或者類的成員, 而非純函式可以自由地修改狀態。純函式一般用於 getter 函式 或者僅輸出一個數據值的操作符。

非純函式必須通過在事件圖表中將執行線連線到函式呼叫節點來顯式地執行。 非純函式通過使用以下這些方式之一進行指定:

  • 在程式碼中定義的函式的函式宣告中指定 BlueprintCallable 關鍵字。
  • 將通過 藍圖編輯器 新增的函式的 Pure(純函式) 複選框保留為未選中狀態。

純函式連線到資料引腳上,當需要依賴於純函式的資料時,編譯器會自動地執行這些函式。這意味著 對於每個連線到純函式上的節點,都會呼叫一次純函式 。純函式通過使用以下這些方式之一進行指定:

  • 在程式碼中定義的函式的函式宣告中指定 BlueprintPure 關鍵字。
  • 選中通過 藍圖編輯器 新增的函式的 Pure(純函式) 複選框。

建立函式

在藍圖中建立函式

在 Graph(圖表) 模式,從 My Blueprint(我的藍圖) 選卡下,點選New Function (新建函式)按鈕。

在藍圖介面中建立函式

在 Blueprint Interface(藍圖介面) 中建立函式同在 Class Blueprint(類藍圖) 或 Level Blueprint(關卡藍圖) 中建立函式一樣,但是實現是有很大差別的。

在 Graph(圖表) 模式,從 My Blueprint(我的藍圖) 選卡下,點選New Function (新建函式)按鈕。

編輯函式

一旦建立了函式,您就需要定義其功能。這個過程需要兩步:

  • 建立必要的輸入和輸出引數
  • 在您的輸入和輸出之間建立節點網路來定義函式行為。

呼叫函式

一旦您建立並定義了您的函式後,就可以在您的事件圖表中呼叫它。要想建立一個呼叫您的函式的節點:

  • 從 我的藍圖 選卡中拖拽您的函式到事件圖表內的空白處
  • 在事件圖表中右擊,或者從適當的執行引腳或資料引腳拖拽滑鼠來開啟關聯選單。在關聯選單中搜索您的函式,然後選中它來新增函式呼叫節點。
  1. https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/UserGuide/index.html