如何在C++中创建可被Blueprint调用的全局函数

继承蓝图函数库UBlueprintFunctionLibrary,实现保存文件到硬盘

概流程:

1+创建一个C++类,继承自UBlueprintFunctionLibrary。这里需要注意一点,在编辑器中不能添加父类为UBlueprintFunctionLibrary的c++类. 所以需要先利用编辑器一个继承自任意类的c++类,之后在头文件中更改.

2+UBlueprintFunctionLibrary子类中,带有BlueprintCallable属性的函数都可以在Blueprint中调用.

3+函数带有BlueprintPure属性,则说明此函数不会修改任何游戏状态,因此无需exec链的触发(在Blueprint中体现为没有白线输入),可以在任何时刻被调用获取其结果.

4+声明为静态函数,故此创建的蓝图函数库可以在任何工程中使用.

具体代码如下:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. UxwlBlueNode.h  
  2. // Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.  
  3. #pragma once  
  4. #include "xwlBlueNode.generated.h"  
  5. /** 
  6.  *  
  7.  */  
  8. UCLASS()  
  9. class UxwlBlueNode : public UBlueprintFunctionLibrary  
  10. {  
  11.     GENERATED_UCLASS_BODY()  
  12.     UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Test")  
  13.     static FString GetHappyMessage();  
  14.    
  15.     UFUNCTION(BlueprintCallable, Category = "Test")  
  16.     static bool SaveToFile(FString Dir, FString Name, FString Text, bool Overwrite = false);  
  17. };  
  18.    
  19. UxwlBlueNode.cpp  
  20. #include "xwlBlueNode.h"  
  21. UxwlBlueNode::UxwlBlueNode(const class FPostConstructInitializeProperties& PCIP)  
  22.     : Super(PCIP)  
  23. {  
  24. }  
  25. FString UxwlBlueNode::GetHappyMessage() {  
  26.     return FString("Hello, I'm Happy!");  
  27. }  
  28.    
  29. bool UxwlBlueNode::SaveToFile(  
  30.     FString Dir,  
  31.     FString Name,  
  32.     FString Text,  
  33.     bool Overwrite  
  34.     )  
  35.  {  
  36.     IPlatformFile& F = FPlatformFileManager::Get().GetPlatformFile();  
  37.     if (!F.DirectoryExists(*Dir))  
  38.     {  
  39.         F.CreateDirectoryTree(*Dir);  
  40.         if (!F.DirectoryExists(*Dir))  
  41.         {  
  42.             return false;  
  43.         }  
  44.     }  
  45.     Dir += "\\";  
  46.     Dir += Name;  
  47.    
  48.     if (!Overwrite)  
  49.     {  
  50.         if (F.FileExists(*Dir))  
  51.         {  
  52.             return false;  
  53.         }  
  54.     }  
  55.     return FFileHelper::SaveStringToFile(Text, *Dir);  
  56. }  


其中特别注意到SaveToFile参数FString 类型,当参数传进来后,居然用到了*操作符,这是很怪异的.其实我们参看FString定义可以看出:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. UnrealString.h    
  2. /** 
  3.      * Get pointer to the string 
  4.      * 
  5.      * @Return Pointer to Array of TCHAR if Num, otherwise the empty string 
  6.      */  
  7.     FORCEINLINE const TCHAR* operator*() const  
  8.     {  
  9.         return Data.Num() ? Data.GetTypedData() : TEXT("");  
  10.     }  

这是FString内部对*操作符的重载.一切尽在不言中!

最后在蓝图中使用:



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值