藍圖快速入門
序言
本文依據官方教程總結而來,只是帶你對藍圖有一個快速的認識,如果想對藍圖有一個比較深入的了解,那么可以看官方的視頻或者是做一些小項目練手,如果你有編程經驗的話,上手還是很容易的。
藍圖快速入門
什么是藍圖
虛幻引擎中的藍圖可視化系統是一個完整的游戲腳本系統,其理念是使用基於節點的界面從虛幻編輯器中創建游戲可玩性元素,該系統非常靈活且非常強大,因為它為設計人員提供了一般僅供程序員使用的所有概念及工具。它是一種特殊類型的資源,為關卡設計師和游戲開發人員提供了一種在編輯器中快速創建及迭代游戲可玩性的工具。
通過使用藍圖,設計人員幾乎可以創作任何游戲元素的原型,以及實現或修改這些元素。
- 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)
藍圖宏庫是一個存放了一組宏的容器,或者是可以像節點那樣放置到其他藍圖中的自包含圖表。這些藍圖宏庫非常節約時間,因為它們存放了常用的節點序列、及針對執行和數據變換的輸入和輸出。
宏會在所有引用它們的圖表間共享,但是如果它們在編譯過程中是合並的節點,那么它們會自動地展開為圖表。這意味着藍圖宏庫不需要進行編譯,但是對宏所做的修改,僅當重新編譯了包含引用該圖表的藍圖時,這些修改才會反應在圖表中。
參考:
- https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/QuickStart/index.html
- http://blog.csdn.net/neil3d/article/details/49070135
- http://www.slideshare.net/GerkeMaxPreussner/east-coast-devcon-2014-game-framework
- http://www.slideshare.net/GerkeMaxPreussner/gdce-2015-blueprint-components-to-c