藍圖函數庫的功能非常強勁,如果在項目中使用的話有時能達到事半功倍的效果。
藍圖函數庫,Blueprint Function Library。可以非常方便的將代碼中的函數暴露給所有的藍圖使用,同時也提供了很好的代碼復用性。完成的藍圖函數庫可以非常輕易的在其他項目中使用或者共享給其他人。由於在函數庫中定義的所有函數都能在其他的藍圖中訪問,可以說是和單例模式的C++代碼接合的天然素材。也可以防止為了定義一些泛用的函數而頻繁的使用接口繼承。
使用起來也是非常的簡單明了。類似下面的代碼就可以完成一個藍圖函數庫了。
#pragma once #include "CoBpFuncLib.generated.h" /** Blueprintable並不是必須的 */ UCLASS(Blueprintable) class UCoBpFuncLib : public UBlueprintFunctionLibrary { GENERATED_UCLASS_BODY() public: /** <測試函數組 */ UFUNCTION(BlueprintCallable, Category = "UCoBpFuncLib") static int32 GetHp(); UFUNCTION(BlueprintCallable, Category = "UCoBpFuncLib") static void AddHp(int32 Val); };
上面的是頭文件,如果沒有打算在藍圖中繼承這個函數庫的話可以選擇去掉這個聲明。
#include "CoBpFuncLib.h" #include "LogicMisc/StateCenter.h" ////////////////////////////////////////////////////////////////////////// // UCoBpFuncLib UCoBpFuncLib::UCoBpFuncLib(const class FObjectInitializer& PCIP) : Super(PCIP) { } int32 UCoBpFuncLib::GetHp() { return StateCenter::sharedStateCenter()->miPlayerHp; } void UCoBpFuncLib::AddHp(int32 Val) { StateCenter::sharedStateCenter()->miPlayerHp += Val; }
上面的代碼實現通過訪問存儲有miPlayerHp的單例來進行HP的訪問和調整。編譯后運行,隨便打開一個藍圖都能訪問到這兩個函數。注意,上面代碼中並沒有給出StateCenter的定義,如果有想要直接嘗試的童鞋請去掉相關的代碼。
有了藍圖函數庫,我們在進行游戲邏輯設計時就又多了很多選擇。