1. UE4藍圖的宏
在藍圖中,我們可以把一堆經常使用的節點封裝為一個宏,然后通過多次使用這個宏,達到了減少重復代碼量的效果。
如圖:


2. UE4C++中的宏
那么,在UE4的C++中怎么實現宏呢?
看代碼:
//這里的##是把輸入的參數FuncName填進FuncName##Param中; //在宏里,每一行都需要在尾部加\ //經測試,最后一行的“}”的\加不加都可以 #define DDMODFUNC(FuncName);\ struct FuncName##Param : DDParam \ {\ FuncName##Param() { ParamPtr = NULL;}\ }; \ FuncName##Param* FuncName##RT(int32 ModuleIndex, FName FunctionName)\ {\ DDModuleAgreement Agreement;\ Agreement.ModuleIndex = ModuleIndex;\ Agreement.FunctionName = FunctionName;\ FuncName##Param* Param = new FuncName##Param();\ ExecuteFunction(Agreement, Param);\ return Param;\ }\ void FuncName(int32 ModuleIndex, FName FunctionName)\ {\ DDModuleAgreement Agreement;\ Agreement.ModuleIndex = ModuleIndex;\ Agreement.FunctionName = FunctionName;\ FuncName##Param* Param = new FuncName##Param();\ ExecuteFunction(Agreement, Param);\ delete Param;\ }\
內容需要結合前后文理解,故內容看不懂沒關系,關鍵是:
1. 宏名要大寫;
2. ##是把輸入的參數FuncName填進FuncName##Param中;
3. 每行代碼結尾都要加“\”
4. 要加 #define
如何使用宏呢:
在.h中: UCLASS() class RACEFRAME_API ALifeCallActor : public ADDActor { GENERATED_BODY() protected: DDMODFUNC(HappyFunc) } 在.cpp中: void ALifeCallActor::DDEnable() { HappyFunc((int32)ERCGameModule::HUD, "TestNoParam"); }
內容需要結合前后文理解,故內容看不懂沒關系,關鍵是:
1. 如DDMODFUNC(HappyFunc)中,直接調用,不需要加“;”;
2. 在.cpp中,直接使用HappyFunc這個函數,編輯器會自動按照宏的內容生成代碼。
