藍(lán)圖函數(shù)庫
- 靜態(tài)函數(shù)的合集,提供不與特定游戲性對象綁定的效用功能
- 藍(lán)圖類均繼承自 UBlueprintFunctionLibrary
- 可以從藍(lán)圖函數(shù)庫中拖拽自定義函數(shù)節(jié)點(diǎn)九昧,并將其插入到藍(lán)圖邏輯中碘饼。
UCLASS()
class COMMONGAME_API UCommonUIExtensions : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UCommonUIExtensions() { }
UFUNCTION(BlueprintPure, BlueprintCosmetic, Category = "Global UI Extensions", meta = (WorldContext = "WidgetContextObject"))
static ECommonInputType GetOwningPlayerInputType(const UUserWidget* WidgetContextObject);
編譯藍(lán)圖的基本過程:
- 清理類 CleanAndSanitizeClass()重置類的屬性和函數(shù)
- 創(chuàng)建類屬性 CreateClassVariablesFromBlueprint() 中類的屬性和組件
- 創(chuàng)建函數(shù)列表 用 PrecompileFunction()來為類創(chuàng)建函數(shù)列表袜刷。事件圖表和函數(shù)圖表
- 綁定和鏈接類 將藍(lán)圖的屬性和函數(shù)與底層的C++類進(jìn)行綁定和鏈接,確备阜幔可調(diào)用
- 編譯函數(shù) 剩余的節(jié)點(diǎn)生成 FKismetCompiledStatment 對象
- 完成編譯類 確定類標(biāo)記甥厦,并從父類傳播標(biāo)記和元數(shù)據(jù)
- 后端發(fā)出生成的代碼 BackEnd將每個(gè)函數(shù)上下文中的語句集合轉(zhuǎn)換為代碼
- 有FKismetCompilerVMBackend 和 FKismetCppBackend
- 復(fù)制類默認(rèn)對象屬性 將類的舊CDO中的值 復(fù)制到新CDO中
- 重新實(shí)例化 用 TObjectIterator 查找所有實(shí)例粪薛,生成1個(gè)新實(shí)例悴了,然后將舊實(shí)例復(fù)制到新實(shí)例。
C++暴露給藍(lán)圖
- UCLASS(Blueprintable) 修飾的類可被藍(lán)圖繼承 反之(NotBlueprintable)
- UPROPERTY() 修飾把變量公開為該類擴(kuò)展的藍(lán)圖
- UFUNCTION(BlueprintCallable) 從藍(lán)圖調(diào)用C++函數(shù)
- BlueprintImplementableEvent 本地函數(shù)調(diào)用藍(lán)圖的主要方式
- BlueprintNativeEvent 藍(lán)圖沒有覆蓋此函數(shù),則調(diào)用此本地實(shí)現(xiàn)
藍(lán)圖還是C++
- 核心考慮: 速度 復(fù)雜度
- 藍(lán)圖執(zhí)行的速度比 C++ 執(zhí)行慢(特別高頻,或者 大量計(jì)算處)
- 操作大型數(shù)據(jù)集湃交、執(zhí)行字符串操作熟空,等內(nèi)容均復(fù)雜的邏輯C++優(yōu)先
藍(lán)圖API編寫
- 參數(shù)的注釋: @param InString 登出字符串
- 枚舉參數(shù): ExpandEnumAsExecs="OutResult"
- BlueprintPure 可避免在節(jié)點(diǎn)上執(zhí)行引腳(參考獲取某屬性 會被多次調(diào)用)
- 純函數(shù)標(biāo)記為 const 也可避免在節(jié)點(diǎn)上使用執(zhí)行引腳。
搜索
- Ctrl+F 搜索藍(lán)圖中匹配搜尋條件的節(jié)點(diǎn)搞莺、引腳息罗、引腳值、圖表才沧、變量和變量值
- 高級搜索語法 Nodes(Name=Coin) 迈喉,找到藍(lán)圖中所有命名包含"coin"的節(jié)點(diǎn)。
- Graphs(Name=MyFunction && All(Return))
- 包含名稱"MyFunction"的所有圖表將對其所有子類(節(jié)點(diǎn)温圆、本地變量和引腳)測試字符串"Return"挨摸。