UE_C++ —— UFunctions

目录

一,UFunction Declaration

二,Function Specifiers

三,Metadata Specifiers

四,Function Parameter Specifiers

五,Delegates

六,Timers


一,UFunction Declaration

        UFunction是UE反射系统可识别的C++函数,UObject或蓝图函数库都可将成员函数声明为UFunction,通过在头文件中将 UFunction 宏放置在函数声明上方;宏将支持 函数说明符 来更改虚幻引擎解译和使用函数的方式;

UFUNCTION([specifier1=setting1, specifier2, ...], [meta(key1="value1", key2, ...)])
ReturnType FunctionName([Parameter1, Parameter2, ..., ParameterN1=DefaultValueN1, ParameterN2=DefaultValueN2]) [const];

        通过函数说明符将UFunctions公共给蓝图可视化脚本(Blueprint Visual Scripting)图表,以便开发者从蓝图调用或扩展UFunction,而无需更改C++代码;

        在类的默认属性中,UFunctions可绑定到Delegates,以执行一些操作(如将操作与用户输入相关联);还可充当网络回调,意味着当某个变量受网络更新影响时,用户可以将其用于接收通知并运行自定义代码;

        用户甚至可创建自己的控制台命令(通常为 debugconfiguration 或 cheat code 命令),并能在开发版本中从游戏控制台调用这些命令,或将拥有自定义功能的按钮添加到关卡编辑器中的游戏对象;

二,Function Specifiers

        声明函数时,可添加 函数说明符,以控制函数相对于引擎和编辑器的各个方面的行为方式;

BlueprintAuthorityOnly如在具有网络权限的机器上运行(服务器、专用服务器或单人游戏),此函数将仅从蓝图代码执行;
BlueprintCallable函数可在蓝图或关卡蓝图图表内执行;
BlueprintCosmetic此函数为修饰性的,无法在专用服务器上运行;
BlueprintImplementableEvent此函数可在蓝图或关卡蓝图图表内实现;
BlueprintPure

此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行;

默认,带有 const 标记的函数将作为纯函数公开,使用BlueprintPure=false可设置为非纯函数;

纯函数不会缓存结果,因此在对蓝图函数进行任何重大操作时都需要小心;比较好的做法是避免在蓝图纯函数中输出数组属性;

CallInEditor可在实例上通过细节面板中调用此函数;
Category = "TopCategory\|SubCategory\|Etc"在蓝图编辑工具中显示指定函数的类别;使用 | 运算符定义嵌套类别;
BlueprintNativeEvent此函数旨在被蓝图覆盖掉,但也具有默认原生实现;用于声明名称与主函数相同的附加函数,但末尾添加了_Implementation,是写入代码的位置;如未找到任何蓝图覆盖,该自动生成的代码将调用 _Implementation 方法;
Client此函数仅在调用此函数对象的客户端上执行;用于声明名称与主函数相同的附加函数,但末尾添加了_Implementation;必要时,此自动生成的代码将调用 _Implementation 方法;
Server此函数仅在服务器上执行;用于声明名称与主函数相同的附加函数,但末尾添加了 _Implementation,是写入代码的位置;必要时,此自动生成的代码将调用 _Implementation 方法;
WithValidation用于声明名称与主函数相同的附加函数,但末尾需要添加_Validate;此函数使用相同的参数,但是会返回bool,以指示是否应继续调用主函数;
CustomThunkUnrealHeaderTool 代码生成器将不为此函数生成thunk,用户需要自己通过 DECLARE_FUNCTION 或 DEFINE_FUNCTION 宏来提供thunk;
Exec此函数可从游戏内控制台执行;仅在特定类中声明时,Exec命令才有效;
NetMulticast此函数将在服务器上本地执行,也将复制到所有客户端上,无论该Actor的 NetOwner 为何;
Reliable此函数将通过网络复制,并且一定会到达,即使出现带宽或网络错误;仅在与ClientServer配合使用时才有效;
Unreliable此函数将通过网络复制,但可能会因带宽限制或网络错误而失败;仅在与ClientServer配合使用时才有效;
SealedEvent无法在子类中覆盖此函数;SealedEvent关键词只能用于事件;对于非事件函数,请声明为staticfinal,以密封它们;
ServiceRequest此函数为RPC(远程过程调用)服务请求,这意味着 NetMulticast 和 Reliable
ServiceResponse此函数为RPC服务响应,这意味着 NetMulticast 和 Reliable

三,Metadata Specifiers

        声明类、接口、结构体、枚举、枚举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式;每一种类型的数据结构或成员都有自己的元数据说明符列表;

注,Metadata只存在于编辑器中,不要编写能够访问到Metadata的游戏逻辑;

AdvancedDisplay="Parameter1, Parameter2, .."以逗号分隔的参数列表将显示为高级引脚(需UI扩展);
AdvancedDisplay=N用一个数字替代 N ,第N之后的所有参数将显示为高级引脚(需UI扩展);如:'AdvancedDisplay=2' 将把前两个之外的所有参数标记为高级;
ArrayParm="Parameter1, Parameter2, .."说明 BlueprintCallable 函数应使用一个Call Array Function节点,且列出的参数应被视为通配符数组属性;
ArrayTypeDependentParams="Parameter"使用 ArrayParm 时,此说明符将指定一个参数,其将确定 ArrayParm 列表中所有参数的类型;
AutoCreateRefTerm="Parameter1, Parameter2, .."如列出参数(由引用传递)的引脚未连接,其将拥有一个自动创建的默认项;这是蓝图的一个便利功能,经常在数组引脚上使用;
BlueprintAutocast仅能由来自蓝图函数库的静态 BlueprintPure 函数使用;Cast节点将根据返回类型和函数首个参数的类型来自动添加;
BlueprintInternalUseOnly此函数是一个内部实现细节,用于实现另一个函数或节点;其不会直接在蓝图图表中公开;
BlueprintProtected此函数只能在蓝图中的拥有对象上调用;其无法在另一个实例上调用;
CallableWithoutWorldContext用于拥有一个 WorldContext 引脚的 BlueprintCallable 函数,说明函数可被调用,即使其类不实现 GetWorld 函数也同样如此;
CommutativeAssociativeBinaryOperator说明 BlueprintCallable 函数应使用Commutative Associative Binary节点,此节点缺少引脚命名,但拥有一个创建额外输入引脚的 添加引脚(Add Pin) 按钮;
CompactNodeTitle="Name"说明 BlueprintCallable 函数应在压缩显示模式中显示,并提供在该模式中显示的命名;
CustomStructureParam="Parameter1, Parameter2, .."列出的参数都会被视为通配符;
DefaultToSelf用于 BlueprintCallable 函数,说明对象属性的命名默认值应为节点的自我情境;
HideSelfPin隐藏用于指出函数调用所处对象的self引脚;self引脚在与调用蓝图的类兼容的 BlueprintPure 函数上为自动隐藏状态;这通常与 DefaultToSelf 说明符共用;
DeprecatedFunction蓝图对此函数进行引用时将引起编译警告,告知用户函数已废弃;可使用 DeprecationMessage 元数据说明符添加到废弃警告消息(如提供说明如何替代已废弃的函数);
DeprecationMessage="Message Text"如果函数已废弃,尝试编译使用此函数的蓝图时,其将被添加到标准废弃警告;
DeterminesOutputType="Parameter"函数的返回类型将根据连接到命名参数引脚的输入动态更改;该参数应该是一个模板类型,比如 TSubClassOf<X> 或 TSoftObjectPtr<X>,其中函数的原始返回类型是 X* 或带有 X* 作为值类型的容器,比如 TArray<X*>;
DevelopmentOnly被标记为 DevelopmentOnly 的函数只会在Development模式中运行。这适用于调试输出之类的功能(但其不应存在于发布产品中);
DisplayName="Blueprint Node Name"此节点在蓝图中的命名将被此处提供的值所取代,而非代码生成的命名;
ExpandEnumAsExecs="Parameter"用于 BlueprintCallable 函数,说明应为参数使用的枚举中的每个条目创建一个输入执行引脚;命名参数必须是引擎通过 UENUM 标签识别的一个列举类型;
ForceAsFunction将没有来自事件的返回值的 BlueprintImplementableEvent 更改为函数;
HidePin="Parameter"用于 BlueprintCallable 函数,说明参数引脚应从用户视图中隐藏;注:使用此方式每个函数只能隐藏一个参数引脚;
InternalUseParam="Parameter"与 HidePin 相似,这将在用户视图中隐藏命名参数的引脚,只能用于一个函数的一个参数;
KeyWords="Set Of Keywords"指定在搜索此函数时可使用的一套关键词,如合适放置节点在蓝图图表中调用函数;
Latent说明一个延迟操作,延迟操作拥有类型为 FLatentActionInfo 的一个参数,此参数由 LatentInfo 说明符命名;
LatentInfo="Parameter"用于延迟 BlueprintCallable 函数,说明哪个参数是LatentInfo参数;
MaterialParameterCollectionFunction用于 BlueprintCallable 函数,说明应使用材质覆盖节点;
NativeBreakFunc用于 BlueprintCallable 函数,说明函数应以标准Break Struct节点的方式进行显示;
NotBlueprintThreadSafe只在蓝图函数库中有效,此函数将被视为拥有类的整体 BlueprintThreadSafe 元数据的一个例外;
ShortToolTip="Short tooltip"完整提示文本过长时使用的简短提示文本,如父类选取器对话;
ToolTip="Hand-written tooltip覆盖从代码注释自动生成的提示文本;
UnsafeDuringActorConstruction在Actor构造时调用此函数并非安全操作;
WorldContext="Parameter"由 BlueprintCallable 函数使用,说明哪个参数决定运算正在发生的World;
ScriptName="DisplayName"在将此类、属性或函数导出到脚本语言时使用的名称;可以包含以启用的名称作为以分号分隔的额外条目;

四,Function Parameter Specifiers

Out声明由引用传递的参数,使函数对其进行修改;
Optional通过任选关键词可使部分函数参数变为任选,便于调用,任选参数的数值(调用方未指定)取决于函数;

五,Delegates

        委托可以以泛型、类型安全的方式调用C++对象上的成员函数;委托可以动态绑定到任意对象的成员函数,在将来调用该对象的函数,即使调用者不知道该对象的类型;

六,Timers

        定时器 可用于在一段延迟后执行某个动作,或在一段时间内执行动作;如,可以让玩家在获得某个物品后保持无敌10秒,并在10秒后失去无敌效果,或让玩家在进入毒气场景后每秒受到伤害;这类效果都可以通过定时器实现;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值