.obsidian
.vs
00-MOC
01-Diary
02-Note
03-UnrealEngine
Animation
Editor
Gameplay
AI
Animation
Code
Debug
GAS
Gameplay
Http
Lyra
Mass
Online
Other
PuerTS
UObject
UnrealSpecifiers
Flags
Meta
Specifier
UCLASS
Blueprint
Category
Config
Development
Instance
Scene
Serialization
TypePicker
UHT
MinimalAPI
CustomConstructor.md
CustomFieldNotify.md
CustomThunkTemplates.md
Interface.md
Intrinsic.md
NoExport.md
UCLASS().md
不写UCLASS().md
UENUM
UFUNCTION
UINTERFACE
UPARAM
UPROPERTY
USTRUCT
UCLASS.md
UENUM.md
UFUNCTION.md
UINTERFACE.md
UPARAM.md
UPROPERTY.md
USTRUCT.md
UnrealSpecifiers.md
Ue4 c++ UProperty反射 PostEditChangeProperty.md
Ue4Object生命周期.jpg
大钊提供的一种获取UE Private函数的方法.md
LevelScene
Math
Mobile
Plugins
Rendering
Sequence
UI
VirtualProduction
VisualEffect
卡通渲染相关资料
性能优化
流程管理与部署
.keep
03-UnrealEngine.md
04-ComputerGraphics
05-SDHGame
06-DCC
07-Other
08-Assets
09-Templates
.gitattributes
.gitignore
.gitmodules
LICENSE
56 lines
2.2 KiB
Markdown
56 lines
2.2 KiB
Markdown
|
# CustomFieldNotify
|
|||
|
|
|||
|
- **功能描述:** 阻止UHT为该类生成FieldNotify的相关代码。
|
|||
|
|
|||
|
- **引擎模块:** UHT
|
|||
|
- **元数据类型:** bool
|
|||
|
- **作用机制:** 在ClassFlags中增加[HasCustomFieldNotify](../../../Flags/EClassFlags/HasCustomFieldNotify.md)
|
|||
|
- **常用程度:** 0
|
|||
|
|
|||
|
阻止UHT为该类生成FieldNotify的相关代码。
|
|||
|
|
|||
|
在源码里只在UWidget上使用,例如该类里面的bIsEnabled是FieldNotify,正常来说UHT要为其生成代码。但如果该类想自己手动书写这些UHT代码,则可以加上CustomFieldNotify来阻止UHT生成。UWidget的cpp里因为要用别的方式UE_FIELD_NOTIFICATION_IMPLEMENT_CLASS_DESCRIPTOR,因此要拒绝UHT生成。
|
|||
|
|
|||
|
如果自己的类也要自己UE_FIELD_NOTIFICATION_IMPLEMENT_CLASS_DESCRIPTOR,则可以用上CustomFieldNotify。
|
|||
|
|
|||
|
## 源码例子:
|
|||
|
|
|||
|
```cpp
|
|||
|
//E:\P4V\Engine\Source\Runtime\UMG\Public\FieldNotification\FieldNotificationDeclaration.h
|
|||
|
UCLASS(Abstract, BlueprintType, Blueprintable, CustomFieldNotify)
|
|||
|
class UMG_API UWidget : public UVisual, public INotifyFieldValueChanged
|
|||
|
{
|
|||
|
GENERATED_UCLASS_BODY()
|
|||
|
public:
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_CLASS_DESCRIPTOR_BASE_BEGIN(UMG_API)
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_FIELD(ToolTipText)
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_FIELD(Visibility)
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_FIELD(bIsEnabled)
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_ENUM_FIELD_BEGIN(ToolTipText)
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_ENUM_FIELD(Visibility)
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_ENUM_FIELD(bIsEnabled)
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_ENUM_FIELD_END()
|
|||
|
UE_FIELD_NOTIFICATION_DECLARE_CLASS_DESCRIPTOR_BASE_END();
|
|||
|
|
|||
|
|
|||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, FieldNotify, Getter="GetIsEnabled", Setter="SetIsEnabled", BlueprintGetter="GetIsEnabled", BlueprintSetter="SetIsEnabled", Category="Behavior")
|
|||
|
uint8 bIsEnabled:1;
|
|||
|
|
|||
|
//cpp
|
|||
|
UE_FIELD_NOTIFICATION_IMPLEMENT_CLASS_DESCRIPTOR_ThreeFields(UWidget, ToolTipText, Visibility, bIsEnabled);
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
## 原理:
|
|||
|
|
|||
|
在判断条件上可见HasCustomFieldNotify的判断。
|
|||
|
|
|||
|
```cpp
|
|||
|
protected static bool NeedFieldNotifyCodeGen(UhtClass classObj)
|
|||
|
{
|
|||
|
return
|
|||
|
!classObj.ClassExportFlags.HasAnyFlags(UhtClassExportFlags.HasCustomFieldNotify) &&
|
|||
|
classObj.ClassExportFlags.HasAnyFlags(UhtClassExportFlags.HasFieldNotify);
|
|||
|
}
|
|||
|
|
|||
|
```
|