[{"data":1,"prerenderedAt":79},["ShallowReactive",2],{"\u002F2014-12-24-%E8%93%9D%E5%9B%BE%E5%87%BD%E6%95%B0%E5%BA%93%E5%B0%8F%E7%BB%93":3},{"id":4,"title":5,"body":6,"date":56,"description":12,"extension":57,"meta":58,"navigation":61,"path":73,"seo":74,"stem":75,"tags":76,"__hash__":78},"blogs\u002F_legacy\u002F2014\u002F2014-12-24-%e8%93%9d%e5%9b%be%e5%87%bd%e6%95%b0%e5%ba%93%e5%b0%8f%e7%bb%93.md","蓝图函数库小结",{"type":7,"value":8,"toc":52},"minimark",[9,13,16,19,30,33,39,42,49],[10,11,12],"p",{},"蓝图函数库的功能非常强劲，如果在项目中使用的话有时能达到事半功倍的效果。",[10,14,15],{},"蓝图函数库，Blueprint Function Library。可以非常方便的将代码中的函数暴露给所有的蓝图使用，同时也提供了很好的代码复用性。完成的蓝图函数库可以非常轻易的在其他项目中使用或者共享给其他人。由于在函数库中定义的所有函数都能在其他的蓝图中访问，可以说是和单例模式的C++代码接合的天然素材。也可以防止为了定义一些泛用的函数而频繁的使用接口继承。",[10,17,18],{},"使用起来也是非常的简单明了。类似下面的代码就可以完成一个蓝图函数库了。",[20,21,26],"pre",{"className":22,"code":24,"language":25},[23],"language-text","#pragma once\n\n#include \"CoBpFuncLib.generated.h\"\n\n\u002F** Blueprintable并不是必须的 *\u002F\nUCLASS(Blueprintable) \nclass UCoBpFuncLib : public UBlueprintFunctionLibrary \n{ \n    GENERATED_UCLASS_BODY()\n\npublic: \n    \u002F** \u003C测试函数组 *\u002F \n    UFUNCTION(BlueprintCallable, Category = \"UCoBpFuncLib\") \n        static int32 GetHp();\n\n    UFUNCTION(BlueprintCallable, Category = \"UCoBpFuncLib\") \n        static void AddHp(int32 Val);\n};\n","text",[27,28,24],"code",{"__ignoreMap":29},"",[10,31,32],{},"上面的是头文件，如果没有打算在蓝图中继承这个函数库的话可以选择去掉这个声明。",[20,34,37],{"className":35,"code":36,"language":25},[23],"#include \"CoBpFuncLib.h\" \n#include \"LogicMisc\u002FStateCenter.h\"\n\n\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F \n\u002F\u002F UCoBpFuncLib\n\nUCoBpFuncLib::UCoBpFuncLib(const class FObjectInitializer& PCIP) \n    : Super(PCIP) \n{\n\n}\n\nint32 UCoBpFuncLib::GetHp() \n{ \n    return StateCenter::sharedStateCenter()->miPlayerHp; \n}\n\nvoid UCoBpFuncLib::AddHp(int32 Val) \n{ \n    StateCenter::sharedStateCenter()->miPlayerHp += Val; \n}\n",[27,38,36],{"__ignoreMap":29},[10,40,41],{},"上面的代码实现通过访问存储有miPlayerHp的单例来进行HP的访问和调整。编译后运行，随便打开一个蓝图都能访问到这两个函数。注意，上面代码中并没有给出StateCenter的定义，如果有想要直接尝试的童鞋请去掉相关的代码。",[10,43,44],{},[45,46],"img",{"alt":47,"src":48},"image","\u002Fwp-content\u002Fuploads\u002F2014\u002F12\u002Fimage_thumb2.png",[10,50,51],{},"有了蓝图函数库，我们在进行游戏逻辑设计时就又多了很多选择。",{"title":29,"searchDepth":53,"depth":54,"links":55},2,3,[],"2014-12-24","md",{"layout":59,"status":60,"published":61,"author":62,"author_login":63,"author_email":64,"author_url":65,"wordpress_id":66,"wordpress_url":67,"date_gmt":68,"excerpt":69},"post","publish",true,{"display_name":63,"login":63,"email":64,"url":65},"chaoshikari","chaoshikari@gmail.com","\u002F",1098,"\u002F\u002F?p=1098","2014-12-24 14:15:16 +0000",{"type":7,"value":70},[71],[10,72,12],{},"\u002F2014-12-24-蓝图函数库小结",{"title":5,"description":12},"_legacy\u002F2014\u002F2014-12-24-%e8%93%9d%e5%9b%be%e5%87%bd%e6%95%b0%e5%ba%93%e5%b0%8f%e7%bb%93",[77],"UE4","IEvLVqspmaFpcc3HuUS6l-ozw7OWbXd9NXUKeAJp-_Q",1788763181000]