UE4从C++到蓝图

01 PROPERTY宏

当我们需要将一个UObject的子类的成员变量注册到蓝图中时,只需要借助UPROPERTY宏即可。
先创建一个子类,在.h文件的类中添加如下代码:

UPROPERTY(EditAnywhere,Category="mytest")
int32 test_time;

然后可以在.cpp文件的构造函数中设置test_time的初值:

test_time=3;

最后,在虚幻编辑器中就可以看到该属性。

属性说明符

UPROPERTY的括号中是属性说明符,以控制属性与引擎和编辑器诸多方面的相处方式。

属性标签效果
AdvancedDisplay属性将被放置在其出现的任意面板的高级(下拉)部分中。
AssetRegistrySearchableAssetRegistrySearchable 说明符说明此属性与其值将被自动添加到将此包含为成员变量的所有资源类实例的资源注册表。不可在结构体属性或参数上使用。
BlueprintAssignable只能与组播委托共用。公开属性在蓝图中指定。
BlueprintAuthorityOnly此属性必须为一个组播委托。在蓝图中,其只接受带 BlueprintAuthorityOnly 标签的事件。
BlueprintCallable仅用于组播委托。应公开属性在蓝图代码中调用。
BlueprintGetter=GetterFunctionName此属性指定一个自定义存取器函数。如此属性不带 BlueprintSetter 或 BlueprintReadWrite 标签,则其为隐式 BlueprintReadOnly
BlueprintReadOnly此属性可由蓝图读取,但不能被修改。此说明符与 BlueprintReadWrite 说明符不兼容。
BlueprintReadWrite可从蓝图读取或写入此属性。此说明符与 BlueprintReadOnly 说明符不兼容。
BlueprintSetter=SetterFunctionName此属性拥有一个自定义编译函数,被隐式标记为 BlueprintReadWrite。注意:必须对变异函数进行命名,并为相同类的一部分。
Category="TopCategory|SubCategory|..."指定在蓝图编辑工具中显示时的属性类别。使用 | 运算符定义嵌套类目。
Config此属性将被设为可配置。当前值可被存入与类相关的 .ini 文件中,创建后将被加载。无法在默认属性中给定一个值。暗示为 BlueprintReadOnly
DuplicateTransient说明在任意类型的复制中(复制/粘贴、二进制复制等),属性的值应被重设为类默认值。
EditAnywhere说明此属性可通过属性窗口在原型和实例上进行编辑。此说明符与所有"可见"说明符均不兼容。
EditDefaultsOnly说明此属性可通过属性窗口进行编辑,但只能在原型上进行。此说明符与所有"可见"说明符均不兼容。
EditFixedSize只适用于动态数组。这能防止用户通过虚幻编辑器属性窗口修改数组长度。
EditInline允许用户在虚幻编辑器的属性查看器中编辑此属性所引用的Object的属性(只适用于Object引用,包括Object引用的数组)。
EditInstanceOnly说明此属性可通过属性窗口进行编辑,但只能在实例上进行,不能在原型上进行。此说明符与所有"可见"说明符均不兼容。
Export只适用于Object属性(或Object数组)。说明Object被复制时(例如复制/粘贴操作)指定到此属性的Object应整体导出为一个子Object块,而非只是输出Object引用本身。
GlobalConfig工作原理与 Config 相似,不同点是无法在子类中进行覆盖。无法在默认属性中对其给定一个值。暗示为 BlueprintReadOnly
Instanced仅限Object(UCLASS)属性。此类的一个实例创建时,其将被给定一个Object的特殊副本,指定到默认项中的此属性。用于实例化类默认属性中定义的子Object。暗示为 EditInlineExport
Interp说明值可随时间由Matinee中的一个轨迹驱动。
Localized此属性的值将拥有一个定义的本地化值。多用于字符串。暗示为 ReadOnly
Native属性为本地:C++代码负责对其进行序列化并公开到垃圾回收
NoClear阻止从编辑器将此Object引用设为空。隐藏编辑器中的清除(和浏览)按钮。
NoExport只适用于本地类。此属性不应包含在自动生成的类声明中。
NonPIEDuplicateTransient属性将在复制中被重设为默认值,除非其被复制用于PIE会话。
NonTransactional说明对此属性值的修改不会包含在编辑器的撤销/重新执行历史中。
NotReplicated跳过复制。这只会应用到服务请求函数中的结构体成员和参数。
Replicated属性应随网络进行复制。
ReplicatedUsing=FunctionNameReplicatedUsing 说明符指定一个回调函数,其在属性通过网络更新时执行。
RepRetry只适用于结构体属性。如果此属性未能完全发送(举例而言:Object引用尚无法通过网络进行序列化),则重新尝试对其的复制。对简单引用而言,这是默认选择;但对结构体而言,这会产生带宽开销,并非优选项。因此在指定此标签之前其均为禁用状态。
SaveGame此说明符可简便地将域显式包含,用于属性关卡中的检查点/保存系统。应在作为游戏存档一部分的所有域上设置此标签,并使用代理归档器对其进行读写。
SerializeText本地属性应被序列化为文本(ImportTextExportText)。
SkipSerialization此属性不会被序列化,但仍能导出为一个文本格式(例如用于复制/粘贴操作)。
SimpleDisplay出现在 细节 面板中的可见或可编辑属性,无需打开"高级"部分即可见。
TextExportTransient此属性将不会导出为一个文本格式(因此其无法用于复制/粘贴操作)。
Transient属性为临时,意味着其无法被保存或加载。以此方法标记的属性将在加载时被零填充。
VisibleAnywhere说明此属性在所有属性窗口中可见,但无法被编辑。此说明符与"Edit"说明符不兼容。
VisibleDefaultsOnly说明此属性只在原型的属性窗口中可见,无法被编辑。此说明符与所有"Edit"说明符均不兼容。
VisibleInstanceOnly说明此属性只在实例的属性窗口中可见(在原型属性窗口中不可见),无法被编辑。此说明符与所有"Edit"说明符均不兼容。

元数据说明符

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

属性元标签效果
AllowAbstract="true/false"用于 SubclassSoftClass 属性。说明抽象类属性是否应显示在类选取器中。
AllowedClasses="Class1, Class2, .."用于 FSoftObjectPath 属性。逗号分隔的列表,表明要显示在资源选取器中的资源类类型。
AllowPreserveRatio用于 Fvector 属性。在细节面板中显示此属性时将添加一个比率锁。
ArrayClamp="ArrayProperty"用于整数属性。将可在UI中输入的有效值锁定在0和命名数组属性的长度之间。
AssetBundles用于 SoftObjectPtrSoftObjectPath 属性。主数据资源中使用的束列表命名,指定此引用属于哪个束的一部分。
BlueprintBaseOnly用于 SubclassSoftClass 属性。说明蓝图类是否应显示在类选取器中。
BlueprintCompilerGeneratedDefaults属性默认项由蓝图编译器生成,CopyPropertiesForUnrelatedObjects 在编译后调用时将不会被复制。
ClampMin="N"用于浮点和整数属性。指定可在属性中输入的最小值 N
ClampMax="N"用于浮点和整数属性。指定可在属性中输入的最大值 N
ConfigHierarchyEditable此属性被序列化为一个配置(.ini)文件,可在配置层级中的任意处进行设置。
ContentDirFDirectoryPath 属性使用。说明将使用 Content 文件夹中的Slate风格目录选取器来选取路径。
DisplayAfter="PropertyName"在蓝图编辑器中,名为 PropertyName 的属性后即刻显示此属性。前提是两个属性属于同一类别,则忽略其在源代码中的顺序进行显示。如多个属性有相同的 DisplayAfter 值和相同的 DisplayPriority 值,将在指定属性之后,按照自身在标头文件中声明的顺序显示。
DisplayName="Property Name"此属性显示的命名,不显示代码生成的命名。
DisplayPriority="N"如两个属性有相同的 DisplayAfter 值,或属于同一类别且无 DisplayAfter 元标签,则此属性将决定其顺序。最高优先级值为1,表示 DisplayPriority 值为1的属性将在 DisplayProirity 值为2的属性之上显示。如多个属性有相同的 DisplayAfter 值,其将按照在标头文件中声明的顺序显示。
DisplayThumbnail="true"说明属性是一个资源类型,其应显示选中资源的缩略图。
EditCondition="BooleanPropertyName"对一个布尔属性进行命名,此属性用于说明此属性的编辑是否被禁用。将"!"放置在属性命名前可颠倒测试。
EditFixedOrder使排列的元素无法通过拖拽来重新排序。EditCondition元标签不再仅限于单个布尔属性。它现在由完全成熟的算式解析器计算,意味着可以包含一个完整的C++表达式。
ExactClass="true"结合 AllowedClasses 用于 FSoftObjectPath 属性。说明是否只能使用 AllowedClasses 中指定的准确类,或子类是否同样有效。
ExposeFunctionCategories="Category1, Category2, .."在蓝图编辑器中编译一个函数列表时,指定其函数应被公开的类目的列表。
ExposeOnSpawn="true"指定此属性是否应在此类类型的一个Spawn Actor节点上公开。
FilePathFilter="FileType"FFilePath 属性使用。说明在文件选取器中显示的路径过滤器。常规值包括"uasset"和"umap",但这些并非唯一可能的值。
GetByRef使该属性的"Get"蓝图节点返回对属性的常量引用,而不是其值的副本。只对稀疏类数据生效,只能在不存在 NoGetter 时使用。
HideAlphaChannel用于 FcolorFLinearColor 属性。说明详细显示属性控件时 Alpha 属性应为隐藏状态。
HideViewOptions用于 SubclassSoftClass 属性。隐藏在类选取器中修改显示选项的功能。
InlineEditConditionToggle表示出布尔属性只内联显示为其他属性中的一个编辑条件切换,不应显示在其自身的行上。
LongPackageNameFDirectoryPath 属性使用。将路径转换为一个长的包命名。
MakeEditWidget用于变换或旋转体属性,或变换/旋转体的排列。说明属性应在视口中公开为一个可移动控件。
NoGetter防止蓝图为该属性生成一个"get"节点。只对稀疏类数据生效。

02 UFUNCTION宏

我们可以通过UFUNCTION宏将函数注册到蓝图中。
先在头文件中声明,然后在源文件中实现该函数即可。

UFUNCTION(BlueprintCallable,Category="MyFunction")
void myFirstFun();

BlueprintCallable表示这个函数可以被蓝图调用

函数说明符

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

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

元数据说明符

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

函数元标签效果
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, ..")列出的参数都会被视为通配符。此说明符需要 UFUNCTION-level specifier、CustomThunk,而它们又需要用户提供自定义的 exec 函数。在此函数中,可对参数类型进行检查,可基于这些参数类型执行合适的函数调用。永不应调用基础 UFUNCTION,出现错误时应进行断言或记录。要声明自定义 exec 函数,使用语法 DECLARE_FUNCTION(execMyFunctionName)MyFunctionName 为原函数命名。
DefaultToSelf用于 BlueprintCallable 函数,说明对象属性的命名默认值应为节点的自我情境。
DeprecatedFunction蓝图对此函数进行引用时将引起编译警告,告知用户函数已废弃。可使用 DeprecationMessage 元数据说明符添加到废弃警告消息(如提供说明如何替代已废弃的函数)。
DeprecationMessage=“Message Text”如果函数已废弃,尝试编译使用此函数的蓝图时,其将被添加到标准废弃警告。
DevelopmentOnly被标记为 DevelopmentOnly 的函数只会在Development模式中运行。这适用于调试输出之类的功能(但其不应存在于发布产品中)。
DisplayName="Blueprint Node Name"此节点在蓝图中的命名将被此处提供的值所取代,而非代码生成的命名。
ExpandEnumAsExecs="Parameter"用于 BlueprintCallable 函数,说明应为参数使用的 列举 中的每个条目创建一个输入执行引脚。命名参数必须是引擎通过 UENUM 标签识别的一个列举类型。
HidePin="Parameter"用于 BlueprintCallable 函数,说明参数引脚应从用户视图中隐藏。注意:使用此方式每个函数只能隐藏一个参数引脚。
HideSelfPin隐藏用于指出函数调用所处对象的self引脚。self引脚在与调用蓝图的类兼容的 BlueprintPure 函数上为自动隐藏状态。这通常与 DefaultToSelf 说明符共用。
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。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值