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这个函数,编辑器会自动按照宏的内容生成代码。