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

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

藍圖快速入門

序言

本文依據官方教程總結而來,只是帶你對藍圖有一個快速的認識,如果想對藍圖有一個比較深入的瞭解,那麼可以看官方的視訊或者是做一些小專案練手,如果你有程式設計經驗的話,上手還是很容易的。

藍圖快速入門

什麼是藍圖

虛幻引擎中的藍圖視覺化系統是一個完整的遊戲腳本系統,其理念是使用基於節點的介面從虛幻編輯器中建立遊戲可玩性元素,該系統非常靈活且非常強大,因為它為設計人員提供了一般僅供程式設計師使用的所有概念及工具。它是一種特殊型別的資源,為關卡設計師和遊戲開發人員提供了一種在編輯器中快速建立及迭代遊戲可玩性的工具。

通過使用藍圖,設計人員幾乎可以創作任何遊戲元素的原型,以及實現或修改這些元素。

  • Games(遊戲)建立遊戲規則,調整遊戲條件等。
  • Players (玩家)使用不同的網格物體、材質或角色自定義來建立變種
  • Cameras (相機)建立新相機視角的原型或者在遊戲執行過程中動態地改變相機。
  • Input(輸入)修改玩家操作,或允許玩家向道具傳入輸入
  • Items (道具)武器、法術、掉落物、觸發器等。
  • Environments (環境)建立隨機的裝置或者程式化地生成道具。

為了對藍圖有一個基本的印象,你可以檢視:

  • 官方快速入門指南
  • 虛幻引擎快速入門視訊教程

對於程式設計師來說,我們可以把它理解為一種視覺化的高階語言(C#等),它有基本的變數、函式、型別轉換,支援繼承、多型等。

藍圖的工作原理

從藍圖的基本形式上講,藍圖是針對您遊戲新增的視覺化指令碼。通過使用連線把節點、事件、函式及變數連線到一起,這樣就可以建立複雜的遊戲性元素。藍圖通過各種用途的節點構成圖來進行工作,這些節點包括針對藍圖每個例項的物件構建、獨立的函式、一般的遊戲性事件,從而實現各種行為及其它功能。

對比

UnrealScript vs Blueprints vs C++

UnrealScript (UE3):

  • 一種面向物件的指令碼語言
  • 跟C,C++,Java的語法相似,但是也有些不同
  • 編譯成虛擬機器位元組碼
  • 添加了一些有趣的功能,比如狀態(States),定時器(Timer)委託等(Delegates)

藍圖 (UE4):

  • 一種面向美術人員和設計師友好的視覺化腳本系統
  • 跟UnrealScript使用的相同的虛擬機器
  • 幾乎跟UnrealScript一樣強,在某些方面甚至更強

C++:

  • 一直是UE遊戲程式設計中的一部分
  • 跟虛擬機器相互緊密地結合在一起
  • 在UE4裡面得到巨大的改進用來讓程式設計人員替代UnrealScript

藍圖跟c++對比

  • 藍圖適合快速迭代
  • 藍圖比原生C++消耗更多的CPU效能
    • 執行在虛擬機器上
    • 大約比原生C++程式碼慢8~10倍
    • 對於大多數簡單的事件驅動的任務,你可能並不會發現效能有什麼大的消耗
    • 許多發行的AAA遊戲都在使用藍圖(包括Epic自己)
    • 每幀需要更新的(tick)應用使用原生C++(物理模擬)
  • 但是,藍圖仍然很合適做原型開發
    • 可以讓設計師在藍圖快速得建立他們所需的原型,然後讓程式設計師把它轉換成程式碼
    • 這是Epic公司如何使用藍圖的

總結

  • 藍圖可以讓設計師快速簡單得實現想法
  • 圖狀結構可以讓程式設計師快速簡單得用C++程式碼實現並優化
  • 程式碼可以在編輯器中新增到任意工程中
  • 快速協作、暢通溝通,不會出現模糊不清的玩法設計。

個人理解,藍圖系統非常強大,可用於快速原型設計、簡單事件驅動玩法的開發,但是如果玩法複雜需要耗費非常多的CPU效能,那麼最好把設計師使用藍圖設計的玩法翻譯成原生的C++程式碼,如果本身一些像物理模擬等需要每幀更新又特別耗時的那麼需要使用C++來進行開發。

藍圖型別

關卡藍圖(Level Blueprint)

關卡藍圖是一種特殊型別的藍圖,是作用於整個關卡的全域性事件圖表。關卡事件或者關卡中的Actor的特定例項,用於啟用以函式呼叫或者流程控制操作的形式呈現的動作序列。熟悉虛幻引擎3的人應該非常熟悉這個概念,因為這和虛幻引擎3中的Kismet的工作原理非常相似。

關卡藍圖提供了針對關卡動態載入、Matinee以及給放置到關卡中的Actor繫結事件的機制。

類藍圖 (Blueprint Class)

類藍圖是一種允許內容建立者輕鬆地基於現有遊戲性類新增功能的資源。它是在編輯器中視覺化地建立的,不需要書寫程式碼,會被作為類儲存在包中。實際上,這種類藍圖定義了一種新類別或型別的Actor,這些Actor可以作為例項放置到地圖中,就和其它型別的Actor的行為一樣。

父類

你可以建立多種不同型別的藍圖,當然在你做這些之前,你需要指定該藍圖的**Parent Class(父類)** 選擇繼承父類,允許你在自己的藍圖裡面呼叫父類建立的屬性。

下面是你建立藍圖是最常見的父類:

  • Actor    一個可以在世界中擺放,或者生成的Actor。
  • Pawn    Pawn是一個可以從控制器獲得輸入資訊處理的Actor.
  • Character    角色是一個包含了行走,跑步,跳躍以及更多動作的Pawn.
  • PlayerController     角色控制器
  • Game Mode    一個Game Mode 定義了遊戲是如何被執行的,遊戲規則,如何的分以及其他方面的內容。

僅包含資料的藍圖(Data-Only Blueprint)

僅包含資料的藍圖是指僅包含程式碼(以節點圖表的形式)、變數及從父類繼承的元件的類的藍圖。僅包含資料的藍圖允許你調整及修改繼承的屬性,但是不能新增新元素。從本質上講,這些藍圖是原型的替代物,設計人員可以使用它們來調整屬性或者設定具有變種的專案。可以通過新增程式碼、變數或者元件來將它轉換成完整的類藍圖。

藍圖介面(Blueprint Interface)

藍圖介面是一個函式或多個函式的集合,它相當於C++中的一個純虛基類,僅有函式名稱,沒有實現,該介面可以新增到其它藍圖中。使用具有該介面的藍圖,都一定會具備這些函式。在每個添加了介面的藍圖中,都可以提供介面的這些函式功能。從本質上講這各一般程式設計中的介面概念一樣,允許通過一個公共介面來共享及訪問多種不同型別的物件。簡單地講,藍圖介面允許不同的類藍圖間彼此共享及傳送資料。

藍圖介面的建立和其他類似,可以通過編輯器中的內容建立器進行建立,但它們有一些侷限性,因為它們不能:

  • 新增新變數
  • 編輯圖表
  • 新增元件

藍圖巨集庫(Blueprint Macro Library)

藍圖巨集庫是一個存放了一組巨集的容器,或者是可以像節點那樣放置到其他藍圖中的自包含圖表。這些藍圖巨集庫非常節約時間,因為它們存放了常用的節點序列、及針對執行和資料變換的輸入和輸出。

巨集會在所有引用它們的圖表間共享,但是如果它們在編譯過程中是合併的節點,那麼它們會自動地展開為圖表。這意味著藍圖巨集庫不需要進行編譯,但是對巨集所做的修改,僅當重新編譯了包含引用該圖表的藍圖時,這些修改才會反應在圖表中。

參考:

  1. https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/QuickStart/index.html
  2. http://blog.csdn.net/neil3d/article/details/49070135
  3. http://www.slideshare.net/GerkeMaxPreussner/east-coast-devcon-2014-game-framework
  4. http://www.slideshare.net/GerkeMaxPreussner/gdce-2015-blueprint-components-to-c