首页 > 其他分享 >UE4中的蓝图函数库

UE4中的蓝图函数库

时间:2023-05-31 16:22:41浏览次数:44  
标签:return 函数库 蓝图 UCLASS StartSession UE4 函数

# 蓝图函数库

此文为AssertionsBlueprint Function Libraries (opens new window)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解

我们在开发中经常发现需要一系列工具函数来让开发更简单。这些函数经常是无状态的,并且在各种gameplay框架代码中重复使用,在使用蓝图构建时也有同样的需求。在这个手册的之前部分里,你知道了如何将你游戏对象里的函数暴露给蓝图。但是如果你想公开工具函数,你不必将它们绑定到某个gameplay游戏对象,在这种场景里,我们使用Blueprint Function Libraries(蓝图函数库)。

蓝图函数库时一系列静态函数的集合,它们提供工具函数并且不绑定到一个特定gameplay对象上。这些库可以分组成各种逻辑函数集合,比如AI蓝图库,或者提供到不同功能区域入口的工具函数,比如系统蓝图库。

创建一个蓝图函数库和使用UFUNCTION()宏将一个函数暴露给蓝图是比较相似的。所有的蓝图函数库继承自UBlueprintFunctionLibrary而不是Actor或者UObject,它们应该只包含静态方法。下面的代码是摘自Analytics Blueprint Library的代码片段,展示了如何安装类库。

UCLASS()
class UAnalyticsBlueprintLibrary :
    public UBlueprintFunctionLibrary
{
    GENERATED_UCLASS_BODY()
    /** Starts an analytics session without any custom attributes specified */
    UFUNCTION(BlueprintCallable, Category="Analytics")
    static bool StartSession();
1
2
3
4
5
6
7
8

正如你在上面看到的,一个蓝图函数库并不直接继承自UObject,所以它需要UCLASS()和GENERATED_UCLASS_BODY()宏,它还使用UFUNCTION()宏装饰在蓝图中调用的函数。蓝图函数库中的函数可被指定为BlueprintCallable或者BlueprintPure,这取决于调用是否其他作用。你可以查看/UE4/Engine/Plugins/Runtime/Analytics/AnalyticsBlueprintLibrary文件,下面是StartSession()函数的实现:

bool UAnalyticsBlueprintLibrary::StartSession()
{
    TSharedPtr<IAnalyticsProvider> Provider = FAnalytics::Get().GetDefaultConfiguredProvider();
    if (Provider.IsValid())
    {
        return Provider->StartSession();
    }
    else
    {
        UE_LOG(LogAnalyticsBPLib, Warning, TEXT("StartSession: Failed to get the default analytics provider. Double check your [Analytics] configuration in your INI"));
    }
    return false;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

注意上面的实现会和一个不是继承UObject的单例类交互,这是一个很好的方法来将第三方类库函数暴露给蓝图或者和并不需要UObject支持的C++类交互。下面的代码是一个蓝图函数库方法的例子,它能执行一些通用的工作来为一个被控制的Actor寻找AIController:

AAIController* UAIBlueprintHelperLibrary::GetAIController(AActor* ControlledActor)
{
    APawn* AsPawn = Cast<APawn>(ControlledActor);
    if (AsPawn != nullptr)
    {
        return Cast<AAIController>(AsPawn->GetController());
    }
    return Cast<AAIController>(ControlledActor);
}
1
2
3
4
5
6
7
8
9

这个函数可看成将多个蓝图节点弄成一个节点。当然,你可以在蓝图中做一个这样的函数,但是如果它经常被调用,最好用C++来实现,这样能提升性能。

标签:return,函数库,蓝图,UCLASS,StartSession,UE4,函数
From: https://www.cnblogs.com/tomato-haha/p/17446502.html

相关文章

  • UE4配置文件
    #配置文件此文为configurationcategories(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。包含配置gameplay或者引擎行为属性设置值的文本文件。在工程加载时,配置文件可以被用来给一些需要初始化的类属性设置值,配置文件......
  • UE4代码编写标准
    #代码编写标准此文为CodingStandard(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。在Epic,我们有一些编码标准和约定。这个文档不打算讨论或进行改进,相反,它反映了Epic的当前编码标准。编码约定对程序员很重要,因为:软件......
  • UE4时间管理
    #时间管理定时器是在短暂延迟或一段时间后计划执行一些操作。比如,你可能想让玩家获取一些东西后变无敌,在十秒后变回原状态,又或者你想让玩家在一个充满毒气的屋子里移动时每秒掉多少血。这样的行为都是通过定时器来实现的。定时器是被全局TimerManager(FTimerManager类)中管理......
  • UE4 源码解析----引擎初始化流程
      在研究UE4的源码过程中着实不理解的地方有很多,今天给大家分享一下UE4引擎的初始化流程。一、引擎的函数入口C++的函数入口都是Main()函数入口,UE4也是一样,Engine\Source\Runtime\Launch\PrivateWindows函数入口 引擎入口函数为:GuardedMain 二、引擎初始化的三个阶......
  • UE4材质入门
    前言:在学习的过程中笔记是不可缺少的,匆匆看过一遍不记笔记和实操的话总会忘掉一些知识点或者是记的不牢固,所以我写了本系列文章,一方面是强迫自己认认真真的看完一章课程,另一方面记笔记加深一下自己的记忆以及思考。所以本系列文章是我学习过程中的笔记,思考,实操以及作业然后分享给......
  • UE蓝图脚本类结构
    UObjectBaseUObjectBaseUtilityUObjectUSubsystemUDynamicSubsystemUEditorSubsystemUEditorActorSubsystem--SpawnActorFromObjectUObjectBaseUObjectBaseUtilityUObjectUEditorUtilityObjectUActorActionUtilityUActorActionUtility:publicUEditorUtili......
  • UE4 AirSim Windows项目交叉编译Linux包
    1、从Linux环境下AirSim文件夹导入相关.a库至对应路径 2、项目插件中禁用VR相关插件libopenvr_api.soissuewhenbuildingprojectagainstUE4.25·Issue#2889·microsoft/AirSim(github.com) ......
  • UE4学习笔记:Windows系统下如何在C++项目里调用第三方动态库
    本随笔介绍在Windows系统下,由UE4引擎创建的C++项目里如何实现调用第三方动态库的方法。随笔作者还在学习阶段,对UE4引擎的使用和理解还不是非常透彻,难免会在随笔内容里出现技术上或书写上的问题,如果出现了类似的问题欢迎在评论区或者私信讨论。 目录设置第三方库头文件的路......
  • UE4 UCLASS(...)
    类说明符UCLASS和元数据(meta)可以定义引擎和编辑器特定的行为。类声明的语法如下所示:UCLASS([specifier,specifier,...],[meta(key=value,key=value,...)])classClassName:publicParentName{GENERATED_BODY()}声明包含一个类的标准C++类声明。在标准声......
  • 【UE4】插件与模块
    一、什么是插件与模块模块是实现某一个或一类功能的集合,当模块足够独立和庞大、复杂之后,可以将其提升为插件。UE4引擎就是由众多模块组成,而插件也可以包含一个或多个模块,但模块却不能包含插件。相对于模块来说,插件具有更高的独立性,除使用引擎模块外,一般不使用其它插件或模块......